python-3.x - 为什么使用 .loc 引发 SettingWithCopyWarning?

标签 python-3.x pandas dataframe

我已经用 .loc 引发的 SettingWithCopyWarning 错误检查了关于 SO 的类似问题,但我仍然不明白为什么我在以下示例中出现错误。

它出现在第 3 行,我成功地使用 .copy() 使其消失,但我想了解为什么 .loc 在这里没有特别起作用。

即使它是 .loc,制作条件切片是否会创建 View ?

df = pd.DataFrame( data=[0,1,2,3,4,5], columns=['A'])
df.loc[:,'B'] = df.loc[:,'A'].values
dfa = df.loc[df.loc[:,'A'] < 4,:] # here .copy() removes the error
dfa.loc[:,'C'] = [3,2,1,0]

编辑:pandas 版本是 1.2.4

最佳答案

dfa = df.loc[df.loc[:,'A'] < 4,:]<br>

dfa 是 df 数据帧的一部分,仍然引用数据帧,一个 View 。
.copy 创建一个单独的副本,而不仅仅是第一个数据帧的 View 。

dfa.loc[:,'C'] = [3,2,1,0]

当它是 View 而不是副本时,您会收到警告:试图在 DataFrame 的切片副本上设置值。

.loc 正在定位您提供的条件,但如果您不将其设为数据框的副本,它仍然是您设置值的 View 。

关于python-3.x - 为什么使用 .loc 引发 SettingWithCopyWarning?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70489707/

相关文章:

python - 如何根据 id 和 "original date"范围填充 Pandas 数据框?

python - 根据 ID 和月份聚合数据,具体取决于另一列(前与后)

python - 了解 pandas scatter_matrix 参数 'c'

python - 我如何将 pandas 的 .explode() 与 .split() 在多列上与一个附加行结合起来

python - Pandas:组合多索引数据帧的标题行

r - 如何重新排列数据框以使一列中的值成为行名称?

python - 前向传播缓慢 - 训练时间正常

python-3.x - 将 map() 与两个参数一起使用,其中一个参数是列表,另一个参数是整数

python-3.x - 如何加速以下for循环和函数的应用?

python - 在 Python 3.x 中将多个词典写入多个 csv 文件