簡體   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