繁体   English   中英

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

[英]How to cycle through a list of pandas dataframes

我正在尝试使用“ 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)

对于for循环中的人们来说,这是一个常见的问题。 当你说

for df in dflist:

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

使用enumerate修复

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

为了确保鲁棒性,您可以使用errors='ignore'标志,以防万一其中一列不存在,则删除操作不会出错。

但是,真正的问题是,在循环时, df首先引用列表中的东西。 但是,然后通过将名称df.drop(dfnewlist, axis=1)分配给该名称来覆盖名称df 不会取代数据帧在你的列表,你会希望,但创建一个新的名字df不再指向列表中的项目。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM