假設我有一個看起來像這樣的資料框
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,27.9,27.6,na,27.2,26.8],
})
假設我只想在位置 a 插入缺失值,我想使用它
df.loc[df['location']=='a'].interpolate(method = 'linear',inplace=True)
print(df)
但它給了我錯誤
/usr/local/lib/python3.8/dist-packages/pandas/core/frame.py:10709: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
return super().interpolate(
location temp
0 a 11.6
1 a 12.2
2 a NaN
3 a 12.4
4 a 12.9
5 b 27.9
6 b 27.6
7 b NaN
8 b 27.2
9 b 26.8
任何幫助或參考都會有所幫助。謝謝
uj5u.com熱心網友回復:
inplace=True 不好,在這里你應該嘗試:
>>> df.loc[df['location'] == 'a'] = df.interpolate()
>>> df
location temp
0 a 11.6
1 a 12.2
2 a 12.3
3 a 12.4
4 a 12.9
5 b 27.9
6 b 27.6
7 b NaN
8 b 27.2
9 b 26.8
>>>
或者:
df.loc[df['location'] == 'a'] = df.loc[df['location'] == 'a'].interpolate()
洗掉,linear因為它是默認的。
或嘗試df.mask:
>>> df.mask(df['location'] == 'a', df.interpolate())
location temp
0 a 11.6
1 a 12.2
2 a 12.3
3 a 12.4
4 a 12.9
5 b 27.9
6 b 27.6
7 b NaN
8 b 27.2
9 b 26.8
>>>
uj5u.com熱心網友回復:
用于輔助變數中掩碼兩側的性能過濾器。
這是您不能使用的問題inplace,因為創建了新的過濾資料幀,它是原始df. 由于您正在使用,因此inplace=True您會收到上述警告,因為它嘗試就地修改新資料框,您沒有對其進行參考(我懷疑如果您列印 df,您會看到該行實際上沒有效果),類似這里:
m = df['location']=='a'
#linear is default, so omitted
df[m] = df[m].interpolate()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/310977.html
