当从 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.float64
的 pandas.core.series.Series
df['b']
是 numpy.int64
的 pandas.core.series.Series
不知何故,当尝试重现此问题时,仅使用这两列从头开始创建 df
,df['c'] = df['a'] - df['b ']
不显示 SettingWithCopyWarning
!
最佳答案
这是一种不明确的行为,因为您正在访问一个不存在的属性,因此 pandas 会创建一个属性,而前者显式尝试键查找,没有找到它并创建新列。
我强烈建议您避免使用点运算符来访问列,因为它会导致奇怪和错误的行为。
至于警告,它取决于 df
和 df['a']
和 df['b']
实际上是什么。
关于python - 使用 [ ] 而不是点访问 Dataframe 列时出现 Pandas 'SettingsWithCopyWarning',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32937206/