从数据框中删除列

时间:2017-04-02 05:43:01

标签: python pandas

我有5个数据框,我想从中删除某些列。我尝试过循环,就像这样 -

dataframes =[af,bf,cf,df,ef,ff,gf]
for col in dataframes:
  print col.head(1)
  col = col.drop(col.columns[[0,2]],axis=1)
  print col.head(1)

我知道方法是错误的。如果不重复这样做怎么做?

3 个答案:

答案 0 :(得分:1)

考虑数据框列表dataframes

dataframes = [pd.DataFrame(dict(A=[1], B=[2], C=[3])) for _ in range(4)]

使用dropinplace=True

for d in dataframes:
    d.drop(['B'], 1, inplace=True)

for d in dataframes:
    print(d)

   A  C
0  1  3
   A  C
0  1  3
   A  C
0  1  3
   A  C
0  1  3

答案 1 :(得分:1)

我认为如果需要按位置删除列,您的解决方案是正确的,也可以使用list comprehension

df = pd.DataFrame({'A':[1,2,3],
                   'B':[4,5,6],
                   'C':[7,8,9],
                   'D':[1,3,5],
                   'E':[5,3,6],
                   'F':[7,4,3]})

df1 = df*10
dataframes = [df,df1]

#get changed list of df
dataframes = [df.drop(df.columns[[0,2]],axis=1) for df in dataframes]
print (dataframes)
[   B  D  E  F
0  4  1  5  7
1  5  3  3  4
2  6  5  6  3,     B   D   E   F
0  40  10  50  70
1  50  30  30  40
2  60  50  60  30]

#original not changed
print (df1)
    A   B   C   D   E   F
0  10  40  70  10  50  70
1  20  50  80  30  30  40
2  30  60  90  50  60  30
#get changed all df inplace, operation return `None`, so output is _
_ = [df.drop(df.columns[[0,2]],axis=1, inplace=True) for df in dataframes]
print (df1)
    B   D   E   F
0  40  10  50  70
1  50  30  30  40
2  60  50  60  30

并且您的解决方案无需分配,但inplace=True

for col in dataframes:
  print (col.head(1))
  col.drop(col.columns[[0,2]],axis=1, inplace=True)
  print (col.head(1))

print (df1)
    B   D   E   F
0  40  10  50  70
1  50  30  30  40
2  60  50  60  30

答案 2 :(得分:0)

要使用列索引删除数据帧,只需使用
df.drop(df.columns[[0, 2, 5]], axis=1)

注意:这里我将索引传递为0,2和5. df.columns是从零开始的pd.Index