如何循环浏览熊猫数据框列表

时间:2019-02-14 15:53:04

标签: python pandas

我正在尝试找到一种正确的方法,使用“ for循环”在多个熊猫数据帧之间循环。它们都包含从1960年到2016年的'year'列,我想从每个df中删除'1960'到'1995'列。

我创建了dfs列表以及这些年的str值列表。

dflist = [apass,rtrack,gdp,pop]
dfnewlist =[]
for i in range(1960, 1996):
    dfnewlist.append(str(i)) 
for df in dflist:
    df = df.drop(dfnewlist, axis = 1)

我的for循环运行没有错误,但是没有删除列。

编辑-只是添加一下,当我手动执行此操作而没有for循环时,如下所示,它工作正常:

gdp = gdp.drop(dfnewlist, axis = 1)

2 个答案:

答案 0 :(得分:2)

这是for循环中常见的问题。当你说

for df in dflist:

然后更改df,更改不会发生在列表中的实际对象上,仅发生在df

使用enumerate进行修复

for i,df in enumerate(dflist):
    dflist[i]=df.drop(dfnewlist,axis=1)

答案 1 :(得分:0)

为确保某些功能的可靠性,您可以使用errors='ignore'标志,以防万一其中一列不存在,删除操作不会出错。

但是,您真正的问题是循环时,df首先引用列表中的内容。但是随后您通过将df的结果分配给名称df.drop(dfnewlist, axis=1)来覆盖该名称。这不会替换您列表中的数据框,但会创建一个新名称df,该名称不再指向列表中的项目。

相反,您可以使用inplace=True标志。

drop_these = [*map(str, range(1960, 1996)]

for df in dflist:
    df.drop(drop_these, axis=1, errors='ignore', inplace=True)