繁体   English   中英

python中的locals()列表理解错误

[英]Error in list comprehension with `locals()` in python

我已经运行了创建多个变量的python脚本。 现在,我要遍历匹配特定模式的几个数据帧(由脚本创建),并对它们执行简单的操作。 最初,我想获取list_dfs中每个数据list_dfs的行数(具有shape() ),如下所示:

['FAILEDRuns_0112',
 'FAILEDRuns_0121',
 'FAILEDRuns_0126',
 'FAILEDRuns_0129',
 'FAILEDRuns_0131',
 'FAILEDRuns_0134',
 'FAILEDRuns_0135',
 'FAILEDRuns_0137',
 'FAILEDRuns_0142',
 'FAILEDRuns_0153',
 'FAILEDRuns_0165',
 'FAILEDRuns_0171',
 'FAILEDRuns_0175']

实际上,如果我这样做:

for i in list(filter(failed_runs_finder.findall, dir())):
    print(locals()[i].shape[0])

我得到打印到屏幕上的行数:

1
0
0
0
1
0
0
0
0
0
0
0
0

其中包含我需要的信息,尽管不是我想要的格式。 最终,我需要知道的是1的数量和零的数量,因此我考虑了对列表的理解,以最终将总和(即1的数量)与列表的长度(即...的总数)进行比较元素。

但是,如果我这样做:

[locals()[i].shape[0] for i in list_dfs]

我收到以下错误:

KeyError: 'FAILEDRuns_0112'

我不太了解错误的来源。 据我所知,这不是列表理解的语法。

它与在列表理解中使用locals()有什么关系吗?

我的第二个选择是迭代地构建df并获取总和,尽管我认为列表理解更简单,而且我不太了解错误的出处。

如果确实必须依赖locals()请尝试以下方法:

[v.shape[0] for k, v in locals().items() if k in list_dfs]

但是,如建议的那样,使用单个dict来存储所有名称和DataFrame对象可能是更好的方法。

如果要获取行数:

from collections import Counter

cnt = Counter(v.shape[0] for k, v in locals().items() if k in list_dfs)

cnt[1]
# 2

cnt[0]    
# 11

暂无
暂无

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

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