我有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)
我知道方法是错误的。如果不重复这样做怎么做?
答案 0 :(得分:1)
考虑数据框列表dataframes
dataframes = [pd.DataFrame(dict(A=[1], B=[2], C=[3])) for _ in range(4)]
使用drop
和inplace=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