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