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

我正在尝试找出使用“for 循环”循环遍历多个 Pandas 数据帧的正确方法。所有这些都包含从 1960 年到 2016 年的“年份”列,并且我想从每个 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)


杨魅力
浏览 125回答 2
2回答

米脂

对于循环中的人来说,这是一个常见的问题。当你说for df in dflist:然后更改df,更改不会发生在列表中的实际对象上,只是为了 df使用enumerate以修复for i,df in enumerate(dflist):     dflist[i]=df.drop(dfnewlist,axis=1)

GCT1015

为了确保一些稳健性,您可以使用errors='ignore'标志,以防万一列不存在,drop 不会出错。但是,您真正的问题是,当您循环时,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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python