gpt4 book ai didi

python - 删除 pandas 数据框中的列会删除父数据框中的列

转载 作者:太空宇宙 更新时间:2023-11-03 16:53:53 26 4
gpt4 key购买 nike

当我在 python 2.7.10 中创建 pandas 数据框时,如下所示:

data = {'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
'year': [2012, 2012, 2013, 2014, 2014],
'reports': [4, 24, 31, 2, 3]}
df = pd.DataFrame(data, index = ['Cochice', 'Pima', 'Santa Cruz', 'Maricopa', 'Yuma'])
df
Out[48]:
name reports year
Cochice Jason 4 2012
Pima Molly 24 2012
Santa Cruz Tina 31 2013
Maricopa Jake 2 2014
Yuma Amy 3 2014

然后我将该数据帧传递给一个新的数据帧。删除新数据框中的列也会删除原始数据框中的列,如下所示:

df1 = df
del df1['name']
df
Out[56]:
reports year
Cochice 4 2012
Pima 24 2012
Santa Cruz 31 2013
Maricopa 2 2014
Yuma 3 2014

我已经用多个示例完成了此操作,并且行为得到了保留。我试图传递一个包含许多列的表,并仅删除几个干扰后续分析的列。然而,我想保留原始数据框用于其他任务,而这种递归样式的列删除阻止了这种情况。这太令人抓狂了!我相信我以前也这样做过,但没有看到这种行为。

下面的方法似乎可行,但比较麻烦。

df1 = DataFrame(data = df.values, columns = df.columns)
del df1['name']
df

Out[67]:
name reports year
Cochice Jason 4 2012
Pima Molly 24 2012
Santa Cruz Tina 31 2013
Maricopa Jake 2 2014
Yuma Amy 3 2014

执行此操作的最佳方法是什么?为什么有差异?

最佳答案

这是Python,不是pandas。当您对 df 进行赋值时,您实际上指向同一个对象,可以通过查看其内存位置来确认该对象。

df1 = df

>>> id(df1)
4468641552

>>> id(df)
4468641552

您可以创建一个包含所需列的新框架,如下所示:

df1 = df[['year', 'reports']]  # Select desired columns.

删除列以检查行为。

del df1['year']

>>> df # original intact
name reports year
Cochice Jason 4 2012
Pima Molly 24 2012
Santa Cruz Tina 31 2013
Maricopa Jake 2 2014
Yuma Amy 3 2014

>>> df1 # new dataframe dropped column as expected
reports
Cochice 4
Pima 24
Santa Cruz 31
Maricopa 2
Yuma 3

关于python - 删除 pandas 数据框中的列会删除父数据框中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35611874/

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