我目前正在学习如何使用 Pandas,并且我正尝试使用从线性回归与位移列生成的最佳拟合线来替换丢失的数据(马力特征)。我正在做的是仅迭代数据帧中马力列中标记为 NaN 的部分,并通过将同一行中的位移值输入最佳拟合算法来替换数据。我的代码如下所示:
for row, value in auto_data.HORSEPOWER[pd.isnull(auto_data.HORSEPOWER)].iteritems():
auto_data.HORSEPOWER[row] = int(round(slope * auto_data.DISPLACEMENT[row] + intercept))
现在,代码可以正常工作,数据也按预期替换,但当我运行它时,它会生成 SettingWithCopyWarning
。我理解为什么会生成警告,在这种情况下我很好,但是如果有更好的方法来迭代子集,或者有更优雅的方法,我宁愿避免可能导致 future 真正的问题。
我浏览了文档以及 Stack Overflow 上的其他答案。所有解决方案似乎都使用 .loc
,但我似乎无法找出使用 .loc
获取 NaN 行子集的正确语法任何帮助是赞赏。如果有帮助,数据框如下所示:
auto_data.dtypes
Out[15]:
MPG float64
CYLINDERS int64
DISPLACEMENT float64
HORSEPOWER float64
WEIGHT int64
ACCELERATION float64
MODELYEAR int64
NAME object
dtype: object
最佳答案
IIUC 你应该能够这样做:
auto_data.loc[auto_data[HORSEPOWER].isnull(),'HORSEPOWER'] = np.round(slope * auto_data['DISPLACEMENT'] + intercept)
上面的内容将被矢量化并避免循环,您得到的错误是这样做的:
auto_data.HORSEPOWER[row]
我想如果你这样做了:
auto_data.loc[row,'HORSEPOWER']
那么不应发出警告
关于python - 在 Pandas 中清除SettingWithCopyWarning的正确语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32360505/