我有一个包含4列的pandas DataFrame,我想创建一个只有三列的新 DataFrame .这个问题类似于:从数据框中提取特定列,但是对于不是R的pandas.以下代码不起作用,引发错误,并且当然不是这种方式的pandasnic方法.
import pandas as pd old = pd.DataFrame({'A' : [4,5], 'B' : [10,20], 'C' : [100,50], 'D' : [-30,-50]}) new = pd.DataFrame(zip(old.A, old.C, old.D)) # raises TypeError: data argument can't be an iterator
什么是pandasnic方式呢?
有一种方法可以做到这一点,它看起来与R类似
new = old[['A', 'C', 'D']].copy()
在这里,您只需从原始数据框中选择所需的列并为其创建变量.如果你想修改新的数据帧,你可能想要使用它.copy()
来避免SettingWithCopyWarning
.
另一种方法是使用filter
默认情况下创建副本:
new = old.filter(['A','B','D'], axis=1)
最后,根据原始数据框中的列数,使用a表示这可能更简洁drop
(默认情况下也会创建一个副本):
new = old.drop('B', axis=1)
另一个更简单的方法似乎是:
new = pd.DataFrame([old.A,old.B,old.C])。transpose()
其中old.column_name将为您提供一系列。列出所有要保留的列系列,并将其传递给DataFrame构造函数。我们需要进行转置来调整形状。
In [14]:pd.DataFrame([old.A,old.B,old.C]).transpose() Out[14]: A B C 0 4 10 100 1 5 20 50
最简单的方法是
new = old[['A','C','D']]
。