python - 使用 [ ] 而不是点访问 Dataframe 列时出现 Pandas 'SettingsWithCopyWarning'

标签 python python-2.7 pandas

当从 2 个现有列创建新列时,为什么 pandas 会抛出 SettingsWithCopyWarning

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

运行时

df['c'] = df['a'] - df['b']

但不是在运行时

df.c = df['a'] - df['b']

此外,c 列是使用 df['c'] 创建的,但在使用 df.c 时则不是这样

<小时/>

df['a']numpy.float64pandas.core.series.Series

df['b']numpy.int64pandas.core.series.Series

不知何故,当尝试重现此问题时,仅使用这两列从头开始创建 dfdf['c'] = df['a'] - df['b '] 不显示 SettingWithCopyWarning!

最佳答案

这是一种不明确的行为,因为您正在访问一个不存在的属性,因此 pandas 会创建一个属性,而前者显式尝试键查找,没有找到它并创建新列。

我强烈建议您避免使用点运算符来访问列,因为它会导致奇怪和错误的行为。

至于警告,它取决于 dfdf['a']df['b'] 实际上是什么。

关于python - 使用 [ ] 而不是点访问 Dataframe 列时出现 Pandas 'SettingsWithCopyWarning',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32937206/

相关文章:

python - 我如何在 Django 中查询这个?

python - 想在python中输入一个变量方程来编程

Python - 为单个文件的每个部分编写单独的文件

python - 使用条件语句处理 Pandas 中的 NaN 值

python - 计算 python 中某个值相对于另一个值聚合的重复出现次数

python - 基于另一个文件内容的文件输出

python - 如何将混淆矩阵转换为数据框?

python - 无法删除包含零的 pandas DataFrame 中的行

python - 针对 JSONField 的 Django 模型过滤器,其中键包含连字符/破折号

python - 如何合并两个列表