給定一個字典:
{1: [1,2,3,4,5], 2: [55,22,112]}
我想建立一個資料框:
key_id ids
1 1
1 2
1 3
1 4
1 5
2 55
2 22
2 112
我怎樣才能做到這一點?我正在嘗試玩,pd.DataFrame.from_dict()但這似乎不是正確的方法。還嘗試運行字典,并創建一個具有與值串列長度相同的鍵的串列。有沒有有效的方法來做到這一點?
PS有時它將是一個資料框作為值:
{0: pd.DataFrame({'id': {0: 3}})}
uj5u.com熱心網友回復:
我認為一個簡單的串列理解就足夠了:
pd.DataFrame(
[(k, i) for k, v in d.items() for i in v],
columns=['key_id', 'ids']
)
key_id ids
0 1 1
1 1 2
2 1 3
3 1 4
4 1 5
5 2 55
6 2 22
7 2 112
uj5u.com熱心網友回復:
您可以使用 Series 和explode:
d = {1: [1,2,3,4,5], 2: [55,22,112]}
df = (
pd.Series(d, name='ids')
.explode()
.rename_axis('key_ids').reset_index()
)
輸出:
key_ids ids
0 1 1
1 1 2
2 1 3
3 1 4
4 1 5
5 2 55
6 2 22
7 2 112
uj5u.com熱心網友回復:
這是我想到的一個解決方案(可能不是最好的):
df = (pd.json_normalize(d).T
.reset_index()
.explode(0)
.reset_index(drop=True)
.set_axis(['key_id', 'ids'], axis=1)
)
輸出:
>>> df
key_id ids
0 1 1
1 1 2
2 1 3
3 1 4
4 1 5
5 2 55
6 2 22
7 2 112
uj5u.com熱心網友回復:
另一種方法是使用串列比較和分配。
df = pd.concat([pd.DataFrame({'ids' : v}
).assign(key_ids=k) for k,v in d.items()])[['key_ids', 'ids']]
print(df)
key_ids ids
0 1 1
1 1 2
2 1 3
3 1 4
4 1 5
0 2 55
1 2 22
2 2 112
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/430366.html
標籤:python-3.x 熊猫 数据框 字典
