在循环中选择数据框的列

时间:2016-02-27 20:11:32

标签: 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']]

但在循环结束时,每个数据框都具有与之前相同的列。

3 个答案:

答案 0 :(得分:1)

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

然而,这是一种方法。假设你从这样的事情开始:

dfs = [pd.DataFrame({'a': [1], 'b': [1], 'c': [1], 'd': [1]}) for _ in range(3)]

您可以使用简单的comprehensions来完成您的要求:

dfs = [df[['a', 'b']] for df in dfs]

例如,注意:

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

答案 1 :(得分:1)

您创建没有字段的数据框副本 - 您不会更改原始数据框

使用:

del df['column']

从原始DataFrame中删除列

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

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

答案 2 :(得分: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 for c in df if c not in cols_retained]会生成该数据框中不在cols_retained中的所有列的列表。即使其中一个数据帧没有cols_retained中的所有列,此方法也会起作用(如果不需要,可以很容易地添加条件以确保过滤后的数据帧各自具有适当的列数)