gpt4 book ai didi

python - 在 pandas 数据框列之间复制值

转载 作者:行者123 更新时间:2023-12-01 01:09:18 24 4
gpt4 key购买 nike

昨天我花了很多时间尝试将 pandas 数据帧的一列(columnA)中的值复制到同一数据帧中的另一列(columnB)。这些列是带有数字和 NaN 值的 float 。

我研究了这个网站、Stack Overflow、Google 等,我尝试的所有内容要么失败,要么什么也没做,和/或给我一个SettingWithCopyWarning 警告。下面的两种方法都可以复制值,但都会发出此警告。

如果有区别的话,columnA 来自 read_csv 操作,而 columnB 是稍后插入的。

基本上,我想要一些关于哪种方式更好的反馈,或者是否有一种方法可以完成此操作,以便不触发警告。

for row in df.itertuples():
df['columnB'] = df['columnA']

df['columnB'] = df.apply(lambda row: row['columnA'], axis=1)

最佳答案

让我们仔细看看这个。

首先,让我们创建一个 5x5 数据框。

df = pd.DataFrame(np.arange(25).reshape(5,-1), index=[*'abcde'], columns=[*'ABCDE'])
df

输出:

    A   B   C   D   E  
a 0 1 2 3 4
b 5 6 7 8 9
c 10 11 12 13 14
d 15 16 17 18 19
e 20 21 22 23 24

让我们从旧列创建一个新列:

df['Z'] = df['A']
df

输出:

    A   B   C   D   E   Z
a 0 1 2 3 4 0
b 5 6 7 8 9 5
c 10 11 12 13 14 10
d 15 16 17 18 19 15
e 20 21 22 23 24 20

Note: no SettingWithCopyWarnings

现在,让我们复制 df 并将其命名为 df_1,并更改 df_1 中的单元格,df 会发生什么?:

df_1 = df
df_1.loc['a','A'] = 100
print(df_1)
print('\n')
print(df)

输出:

     A   B   C   D   E   Z
a 100 1 2 3 4 0
b 5 6 7 8 9 5
c 10 11 12 13 14 10
d 15 16 17 18 19 15
e 20 21 22 23 24 20

A B C D E Z
a 100 1 2 3 4 0
b 5 6 7 8 9 5
c 10 11 12 13 14 10
d 15 16 17 18 19 15
e 20 21 22 23 24 20

注意:df 也改变了!

现在,让我们获取 df 的一个子集,将其称为 df_ac:

 df_ac = df['a':'c']
df_ac

输出:

     A   B   C   D   E   Z
a 100 1 2 3 4 0
b 5 6 7 8 9 5
c 10 11 12 13 14 10

让我们更改 df_ac 中的值,看看会发生什么:

df_ac['X'] = df['B']

首先,我们得到SettingWithCopyWarning。这是什么意思?嗯,这意味着在这种情况下 df 没有改变。

df_ac

输出:

     A    B   C   D   E   Z    X
a 100 1 2 3 4 0 1
b 5 6 7 8 9 5 6
c 10 11 12 13 14 10 11

但是,打印 df,

     A    B   C   D   E   Z
a 100 1 2 3 4 0
b 5 6 7 8 9 5
c 10 11 12 13 14 10
d 15 16 17 18 19 15
e 20 21 22 23 24 20

避免此警告的一种方法是使用“copy”

df_ac = df['a':'c'].copy()
df_ac['X'] = df_ac['B']

不,SettingWithCopyWarning。

关于python - 在 pandas 数据框列之间复制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55008335/

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