为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

杨魅力 2021-11-09 11:03:46
我正在尝试找出使用“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)
查看完整描述

2 回答

?
米脂

TA贡献1836条经验 获得超3个赞

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

for df in dflist:

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

使用enumerate以修复

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


查看完整回答
反对 回复 2021-11-09
?
GCT1015

TA贡献1827条经验 获得超4个赞

为了确保一些稳健性,您可以使用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)


查看完整回答
反对 回复 2021-11-09
  • 2 回答
  • 0 关注
  • 124 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信