删除pandas数据帧中的列将删除父datafram中的列

2024-06-24 11:50:43 发布

您现在位置:Python中文网/ 问答频道 /正文

当我在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

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

^{pr2}$

我已经用了多个例子,而且行为是守恒的。我试图传递一个包含许多列的表,并且只删除干扰后续分析的两个列。但是,对于其他任务,我希望保留原始数据帧,这种递归样式的列删除正在阻止这一点。这太疯狂了!我相信我以前做过这件事,没有见过这种行为。在

下面的方法似乎有效,但更麻烦。在

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

最好的方法是什么?为什么会有区别?在


Tags: 数据namedfdatasantayearmollyreports
2条回答
df1 = df.copy()
del df1['name']

或者,您可以执行以下操作,这可能是更好的做法:

^{pr2}$

这是Python,不是熊猫。当您分配df时,实际上是指向同一个对象,可以通过查看它们的内存位置来确认。在

df1 = df

>>> id(df1)
4468641552

>>> id(df)
4468641552

可以使用所需列创建新框架,如下所示:

^{pr2}$

删除列以检查行为。在

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

相关问题 更多 >