python - 在 Pandas 中清除SettingWithCopyWarning的正确语法

标签 python pandas

我目前正在学习如何使用 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/

相关文章:

Python-将文本写入文件?

python - 如何计算 pandas 的平均时间?

python - 使用 Django 模板标签 'slice' 切片 pandas 数据框?

python - 尝试使用 get_loc 时出现 Pandas 错误

python - 缩放数组 (sklearn) - python

python - 如何将字符串列表转换为每个元素都是其核心类型的新列表?

python - 如何编写 python 代码以将多个 csv 组合到 excel 中,而无需将数字读取为文本 ..in excel?

python - OpenCV 颜色模板匹配而不是灰度?还有一般模板故障排除。(Python)

python - Pandas:条件聚合

python - 如何对热图的索引 DataFrame 上的 x 轴和 y 轴执行自定义排序?