![](/img/trans.png)
[英]Using Python's `in`-operator in Pandas dataframe .loc
[英]Chaning a value in a pandas DataFrame using the .loc method and = operator
我有一個 dataframe,其中包含我正在嘗試填寫的缺失值。我制作了另一個 dataframe,其中包含填充缺失值的必要數據。 這兩個數據框都有我用來決定要填寫什么值的year
和month
列。缺少值的 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.