gpt4 book ai didi

python - 在 Pandas 中分配列时处理 SettingWithCopyWarning

转载 作者:行者123 更新时间:2023-11-28 22:30:15 26 4
gpt4 key购买 nike

<分区>

我有一个 DataFrame,我想用包含前一行数据的列来扩展它。

这个脚本做的工作:

#!/usr/bin/env python3

import numpy as np
import pandas as pd

n = 2

df = pd.DataFrame({'A': [1,2,3,4,5], 'B': [0,1,1,0,0]}, columns=['A', 'B'])

df2 = df[df['B'] == 0]
print(df2)

for i in range(1, n+1):
df2['A_%d' % i] = df2['A'].shift(i)

print(df2)

输出:

   A  B
0 1 0
3 4 0
4 5 0

A B A_1 A_2
0 1 0 NaN NaN
3 4 0 1.0 NaN
4 5 0 4.0 1.0

这正是我想要的。 DataFrame 现在有两个额外的列 A_1A_2,它们包含 A 列的值 12 行之前。

但是,我也收到了警告:

./my_script.py:14: SettingWithCopyWarning: 
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

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
df2['A_%d' % i] = df2['A'].shift(i)

问题肯定出在我创建df2 之前的过滤。如果我直接在 df 上工作,则不会出现该问题。在我的应用程序中,我需要分别处理原始 DataFrame 的多个部分,因此过滤和绝对是必需的。所有不同的部分(如此处的 df2)稍后会连接起来。

我在 How to deal with SettingWithCopyWarning in Pandas? 中发现了类似的问题和 Pandas SettingWithCopyWarning但那里的解决方案并不能解决问题。

写作例如

df2[:, 'A_%d' % i] = df2['A'].shift(i)

仍然出现相同的警告。

我正在使用 Python 3.5.2 和 Pandas 0.19.2

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com