在pandas dataframe单元格中插入列表

时间:2017-12-02 05:55:59

标签: python python-3.x pandas dataframe data-science

我有一个字典,其中每个键都有一个值列表。 与每个键相关联的列表的长度是不同的。 我想将字典转换为带有两列“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提供的答案,根据我的用例进行修改。 但它没有输出所需的答案。

4 个答案:

答案 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'])