如何将此字典转换为pandas数据框架?
dict = {'key1':['value1','value2'], 'key2':['value1','value2', 'value3'], 'key3':['value1','value2', 'value3', 'value4'] }
我都试过了:
pd.Dataframe(dict)
和pd.DataFrame.from_dict(dict)
,但我得到相同的错误。
ValueError: All arrays must be of the same length
因此,看起来内置的可能性只适用于balanced
字典。
有什么帮助吗?
所以,看起来内置的可能性只适用于平衡字典。
DataFrame.from_dict
可以通过设置orient='index'
:
pd.DataFrame.from_dict(d, orient='index')
# 0 1 2 3
# key1 value1 value2 None None
# key2 value1 value2 value3 None
# key3 value1 value2 value3 value4
要获得转置版本,链接.T
:
pd.DataFrame.from_dict(d, orient='index').T
# key1 key2 key3
# 0 value1 value1 value1
# 1 value2 value2 value2
# 2 None value3 value3
# 3 None None value4
要获得没有null的长格式版本,melt
将id
和value
列的转置版本和dropna
仅在value
上:
(pd.DataFrame.from_dict(d, orient='index').T
.melt(var_name='id', value_name='value')
.dropna(subset=['value']))
# id value
# 0 key1 value1
# 1 key1 value2
# 4 key2 value1
# 5 key2 value2
# 6 key2 value3
# 8 key3 value1
# 9 key3 value2
# 10 key3 value3
# 11 key3 value4
您可以使用itertools.zip_longest
来创建一个数据框架:
from itertools import zip_longest
dct = {
"key1": ["value1", "value2"],
"key2": ["value1", "value2", "value3"],
"key3": ["value1", "value2", "value3", "value4"],
}
df = pd.DataFrame(zip_longest(*dct.values(), fillvalue=np.nan), columns=dct)
print(df)
打印:
key1 key2 key3
0 value1 value1 value1
1 value2 value2 value2
2 NaN value3 value3
3 NaN NaN value4