选择适当的列(for for循环)

时间:2017-03-20 10:03:23

标签: python pandas for-loop

我有一个DataFrame列表,它们都有列['a','b','c']:

list_ = [df1, df2, df3]

并希望运行以下循环:

for lst in list_:
    lst['x'] = 'abc'
    lst = lst[['a', 'x']]

当我打印list_ [0]时,我看到新列'x',但也看到所有其他列。为什么循环中的第一行被执行但第二行没有?

1 个答案:

答案 0 :(得分:2)

第一行在原始数据引用上就地操作。但是,第二行使用原始数据中的切片重新分配变量lst,但此分配不会修改原始数据框,因为现在只有(临时)名称lst指向不同的数据。

一种解决方案:

def fix(lst):
    lst['x'] = 'abc'
    lst = lst[['a', 'x']]
    return lst

list_ = [fix(lst) for lst in list_]

或者基于就地删除列的没有列表理解的解决方案:

s = ['a', 'x']
for lst in list_:
    lst['x'] = 'abc'
    lst.drop([c for c in lst.columns if c not in s], axis=1, inplace=True)