簡體   English   中英

使用 .loc 方法和 = 運算符更改 pandas DataFrame 中的值

[英]Chaning a value in a pandas DataFrame using the .loc method and = operator

我有一個 dataframe,其中包含我正在嘗試填寫的缺失值。我制作了另一個 dataframe,其中包含填充缺失值的必要數據。 這兩個數據框都有我用來決定要填寫什么值的yearmonth列。缺少值的 dataframe 稱為full_arranged ,而 dataframe 我希望導入前者的值稱為median_values

為了填補缺失的數據,我寫了下面的代碼:

for column in full_arranged.drop(['year','month','day', 'date'], axis = 1).columns:
    for year in range(2016,2019):
            for month in range(1,13):
                temp_val = median_values.loc[(median_values['year'] == year) & (median_values['month'] == month), column]
                full_arranged.loc[(full_arranged[column].isnull()) & (full_arranged['year'] == year) & (full_arranged['month'] == month), column] = temp_val

運行這段代碼后,我檢查了缺失值,但它們都沒有改變。 我錯過了什么?

我也嘗試過做同樣的事情,但是使用 pandas 方法pd.fillna並得到了相同的結果(缺失值的類型為 np.nan 但我也厭倦了使用pd.fillna和 pd.nan 運行相同的代碼並且它不工作)。

full_arranged看起來像這樣:

值_1 值_2
2017年 3個 3.52

median_values看起來像這樣:

median_value_for_value_1 median_value_for_value_2
2017年 3個 5個 4個

兩個 DF 的最小示例會有所幫助。

但是,條件& (median_values[column] == column)似乎很奇怪。

你不想做這樣的事情嗎?:

= median_values.loc[(median_values['year'] == year) & (median_values['month'] == month),column]

那么 select 按年和月的行並返回 median_values 列的值 dataframe?

更新:

效率更高的是 Pandas 方式:

    #Build Dummy Dataframes
    full_arranged = pd.DataFrame([[2017,3,np.NAN,3.52],[2017,3,4.5,9],[2017,4,4.5,np.NAN]], columns = ['year','month','value_1','value_2'])
    median_values = pd.DataFrame([[2017,3,5,4],[2017,4,6,7]], columns = ['year','month','value_1','value_2'])
    
    #Set Year/Month Index
    full_arranged.index = pd.to_datetime((full_arranged['year'].astype(str) + "-" + full_arranged['month'].astype(str)))
    median_values.index = pd.to_datetime((median_values['year'].astype(str) + "-" + median_values['month'].astype(str)))
    
    #Update NA Values
    full_arranged = full_arranged.update(median_values, overwrite=False)

pd.to_datetime 是可選的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM