gpt4 book ai didi

python - python pandas 中的 DataFrame.apply 更改原始和重复的 DataFrame

转载 作者:太空狗 更新时间:2023-10-30 00:36:58 26 4
gpt4 key购买 nike

我在更改复制的 pandas DataFrame 时遇到了一些麻烦,并且没有将编辑应用于复制的 原始 DataFrame。

这是一个例子。假设我从字典列表中创建了一个任意的 DataFrame:

In [67]: d = [{'a':3, 'b':5}, {'a':1, 'b':1}]

In [68]: d = DataFrame(d)

In [69]: d

Out[69]:
a b
0 3 5
1 1 1

然后我将“d”数据帧分配给变量“e”,并使用 apply 将一些任意数学应用于列“a”:

In [70]: e = d

In [71]: e['a'] = e['a'].apply(lambda x: x + 1)

出现问题的原因是应用函数显然适用于重复的 DataFrame“e”和原始 DataFrame“d”,这是我一生都无法弄清楚的:

In [72]: e # duplicate DataFrame
Out[72]:
a b
0 4 5
1 2 1

In [73]: d # original DataFrame, notice the alterations to frame 'e' were also applied
Out[73]:
a b
0 4 5
1 2 1

我已经搜索了 pandas 文档和谷歌,以了解为什么会这样,但无济于事。我根本不明白这里发生了什么。

我还尝试了使用元素运算的数学运算(例如,e['a'] = [i + 1 for i in e['a']]),但问题仍然存在。 pandas DataFrame 类型中是否存在我不知道的怪癖?我很感激有人可能提供的任何见解。

最佳答案

这不是 pandas 特有的问题。在 Python 中,赋值从不复制任何东西:

>>> a = [1,2,3]
>>> b = a
>>> b[0] = 'WHOA!'
>>> a
['WHOA!', 2, 3]

如果您想要一个新的 DataFrame,请使用 e = d.copy() 进行复制。

编辑:我应该澄清一下,分配一个裸名从不复制任何东西。对项目或属性的赋值(例如,a[1] = xa.foo = bar)会在后台转换为方法调用,并且可能会进行复制,具体取决于a 是什么类型的对象。

关于python - python pandas 中的 DataFrame.apply 更改原始和重复的 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10844493/

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