Python 在循环中选择数据帧的列

Python 在循环中选择数据帧的列,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧列表: df_list = [df1,df2,df3,df4] 我只想选择其中每一列的一部分,比如: df1 = df1[['column_a','column_e','column_wa']] 但我想让这个操作在一个循环中进行 for df in df_list: df = df[['column_a','column_e','column_wa']] 但是在循环结束时,每个数据帧的列与之前相同。在每个循环迭代中,df绑定到一个数据帧。在一个操作(选择一些列)之

我有一个数据帧列表:

df_list = [df1,df2,df3,df4]
我只想选择其中每一列的一部分,比如:

df1 = df1[['column_a','column_e','column_wa']]
但我想让这个操作在一个循环中进行

for df in df_list:
      df = df[['column_a','column_e','column_wa']]

但是在循环结束时,每个数据帧的列与之前相同。

在每个循环迭代中,
df
绑定到一个数据帧。在一个操作(选择一些列)之后,将形成一个新的数据帧,
df
将绑定到它。没有任何东西会修改原始列表


然而,这里有一种方法可以做到这一点。假设您从以下内容开始:

dfs = [pd.DataFrame({'a': [1], 'b': [1], 'c': [1], 'd': [1]}) for _ in range(3)]
你可以用简单的方法做你想做的事:

例如,注:

>>> dfs[0]
    a   b
0   1   1

您创建了一个没有字段的数据帧副本-您不会更改原始数据帧

使用:

从原始数据帧中删除列的步骤

编辑 DataFrame.drop允许您在一个命令中删除多个列:

df.drop(['column_a','column_e','column_wa'], inplace=True, axis=1)

此方法修改每个原始数据帧

cols_retained = ['column_a','column_e','column_wa']
_ = [df.drop([c for c in df if c not in cols_retained], axis='columns', inplace=True) 
     for df in df_list]
[c表示df中的c,如果c不在cols\u reserved中]
将生成该数据帧中不在
cols\u reserved中的所有列的列表。即使其中一个数据帧没有保留
cols_中的所有列,此方法也会起作用(如果不需要,可以添加一个条件以确保过滤后的数据帧中的每个列都有适当的列数)

df.drop(['column_a','column_e','column_wa'], inplace=True, axis=1)
cols_retained = ['column_a','column_e','column_wa']
_ = [df.drop([c for c in df if c not in cols_retained], axis='columns', inplace=True) 
     for df in df_list]