我有以下字典串列字典的子樣本(來自數百萬個專案的更大字典):
bool_dict = {0: [{0: 4680}, {1: 1185}],
1: [{0: 172}, {1: 9}],
2: [{0: 149}, {1: 1282}],
3: [{0: 20}, {1: 127}],
4: [{0: 0}, {1: 0}]}
我將其轉換為以下形式的資料框:
0 1
0 {0: 4680} {1: 1185}
1 {0: 172} {1: 9}
2 {0: 149} {1: 1282}
3 {0: 20} {1: 127}
4 {0: 0} {1: 0}
通過執行以下操作:
test=pd.DataFrame(bool_dict.values(),columns['0','1'],index=bool_dict.keys()).sort_index()
問題是我只需要資料框中每個單元格的值,而不是鍵。因此,所需的輸出是:
0 1
0 4680 1185
1 172 9
2 149 1282
3 20 127
4 0 0
我嘗試了以下方法:
test['0'] = test['0'].apply(lambda x: x[0])
但后來我得到了一個關于我認為是字典的關鍵錯誤。
為了確保它確實是一本字典,然后我嘗試了
from ast import literal_eval
test['0']=test['0'].apply(lambda x: literal_eval(str(x)))
然后又試了一次
test['0'] = test['0'].apply(lambda x: x[0])
沒有成功(我也嘗試將密鑰設為“0”)。
我可以做一個分裂的駭人聽聞的事情,:然后洗掉無關的東西,但由于很多原因,這感覺不對。
uj5u.com熱心網友回復:
一種方法是將內部串列轉換為字典,然后將其傳遞給 DataFrame 建構式:
bool_dict_flattened = {i: {k:v for d in lst for k,v in d.items()} for i, lst in bool_dict.items()}
df = pd.DataFrame.from_dict(bool_dict_flattened, orient='index')
另一種選擇是str通過使用每列的列名和鍵匹配的事實對列應用訪問器:
out = pd.DataFrame.from_dict(bool_dict, orient='index').apply(lambda x: x.str[x.name])
輸出:
0 1
0 4680 1185
1 172 9
2 149 1282
3 20 127
4 0 0
uj5u.com熱心網友回復:
您可以通過第一個 lambda 遍歷每一行,并使用第二個 lambda 遍歷該行中的每個單元格并讀取字典的值:
df = pd.DataFrame(bool_dict).T
df.apply(lambda x: x.apply(lambda y: list(y.values())[0]))
df
0 1
0 4680 1185
1 172 9
2 149 1282
3 20 127
4 0 0
uj5u.com熱心網友回復:
test['0'] = test['0'].apply(lambda x: x[0])但后來我得到了一個關于我認為是字典的關鍵錯誤。
你得到的關鍵錯誤是因為你的列名是整數,但是,你用字串訪問它。嘗試
test[0] = test[0].apply(lambda x: x[0])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/456240.html
上一篇:將串列串列的字典轉換為元組的字典
