繼續我的最后一個問題
假設我將資料框擴展為如下所示的內容
import pandas as pd
import numpy as np
na = np.nan
df = pd.DataFrame({
'location' : ['a','a','a','a','a','b','b','b','b','b'],
'temp' : [11.6,12.2,na,12.4,12.9,na,17.6,17.4,17.2,16.8],
'precip': [0.22,0.22,0.24,na,0.27,0.33,na,0.34,0.34,0.37]
})
我只想填寫位置 a上缺失的臨時值。我試過這樣的事情
df[df['location'] == 'a']['temp'] = df[df['location'] == 'a']['temp'].interpolate()
它給了我這個錯誤
<string>:12: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
location temp precip
0 a 11.6 0.22
1 a 12.2 0.22
2 a NaN 0.24
3 a 12.4 NaN
4 a 12.9 0.27
5 b NaN 0.33
6 b 17.6 NaN
7 b 17.4 0.34
8 b 17.2 0.34
9 b 16.8 0.37
任何幫助或參考將不勝感激。謝謝
uj5u.com熱心網友回復:
使用DataFrame.loc:
m = df['location'] == 'a'
df.loc[m, 'temp'] = df.loc[m, 'temp'].interpolate()
您的解決方案(如果大 df 會更慢,因為創建了 2 次掩碼):
df.loc[df['location'] == 'a', 'temp'] = df.loc[df['location'] == 'a', 'temp'].interpolate()
uj5u.com熱心網友回復:
您可以使用update來就地修改值。
df.update(df.loc[df['location'] == 'a', 'temp'].interpolate())
print(df)
# Output:
location temp precip
0 a 11.6 0.22
1 a 12.2 0.22
2 a 12.3 0.24
3 a 12.4 NaN
4 a 12.9 0.27
5 b NaN 0.33
6 b 17.6 NaN
7 b 17.4 0.34
8 b 17.2 0.34
9 b 16.8 0.37
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/310966.html
