gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 21:14:39 25 4
gpt4 key购买 nike

我运行了一个创建多个变量的 python 脚本。现在我想迭代一些匹配特定模式的数据帧(由脚本创建)并对它们执行简单的操作。最初我想获取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 的数量和 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

关于python - python 中的 `locals()` 列表理解错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54810346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com