我有一个字典,其中每个键都有一个值列表。 与每个键相关联的列表的长度是不同的。 我想将字典转换为带有两列“Key”和“Values”的pandas数据帧。每行在“键”列中具有一个字典键,在“值”列中具有与其关联的值列表。数据框如下所示:
mapping_dict = {'A':['a', 'b', 'c', 'd'], 'B':['aa', 'bb', 'cc']}
df =
Key Value
0 A ['a', 'b', 'c', 'd']
1 B ['aa', 'bb', 'cc']
我尝试使用here提供的答案,根据我的用例进行修改。 但它没有输出所需的答案。
答案 0 :(得分:1)
在构造函数中使用pd.Series
,因为dict值大小不相等,然后set_axis
添加列名,即
mapping_dict = {'A':['a', 'b', 'c', 'd'], 'B':['aa', 'bb', 'cc']}
df = pd.DataFrame(pd.Series(mapping_dict).reset_index()).set_axis(['Key','Value'],1,inplace=False)
Key Value
0 A [a, b, c, d]
1 B [aa, bb, cc]
选项2,将dict项转换为list然后将其传递给构造函数:
df = pd.DataFrame(list(mapping_dict.items()),columns=['Key','Value'])
答案 1 :(得分:0)
我认为您可能需要事先更新字典,然后才能使用from_dict。更新以使您的字典成为列表列表。
import pandas as pd
mapping_dict = {'A':['a', 'b', 'c', 'd'], 'B':['aa', 'bb', 'cc']}
updated_dict = {k: [v] for k, v in mapping_dict.items()}
df = pd.DataFrame.from_dict(updated_dict,orient='index')
如果您想要确切的格式
df_formatted = df.reset_index()
df_formatted.columns = ['Key', 'Value']
print(df_formatted)
Key Value
0 B [aa, bb, cc]
1 A [a, b, c, d]
更新
Bharath的回答较短,但如果您仍想使用from_dict,那么您可以采用他的方法做部分
df2 = pd.DataFrame.from_dict(list(mapping_dict.items()))
df2.columns = ['Key', 'Value']
答案 2 :(得分:0)
如果您传递列表,pandas会将其视为多行。但是,您可以通过将列表作为外部列表的单个元素放置来欺骗它:
import pandas as pd
mapping_dict = {'A':[['a', 'b', 'c', 'd']], 'B':[['aa', 'bb', 'cc']]}
df = pd.DataFrame(mapping_dict)
df
A B
0 [a, b, c, d] [aa, bb, cc]
答案 3 :(得分:0)
我必须在特定位置插入一个列表,以下解决方案对我有用。
由于某些原因,在应用函数中返回列表/数组时,熊猫不会抱怨:
df.loc[0,'A'] = df.loc[0,A].apply(lambda x: ['a', 'b', 'c', 'd'])