[英]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.