在熊猫数据框单元格中插入列表
Posted
技术标签:
【中文标题】在熊猫数据框单元格中插入列表【英文标题】:Insert list in pandas dataframe cell 【发布时间】:2018-05-16 05:59:01 【问题描述】:我有一本字典,其中每个键都有一个值列表。 与每个键关联的列表的长度是不同的。 我想将字典转换为具有两列“键”和“值”的熊猫数据框。每一行在“Key”列中都有一个字典键,在“Values”列中有与其关联的值列表。数据框如下所示:
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 提供的答案,根据我的用例对其进行修改。 但它没有输出所需的答案。
【问题讨论】:
【参考方案1】:您只需使用 pandas 中的“at”设置器即可:
df.at[0,'A'] = ['a', 'b', 'c', 'd']
如果 column dtype 是“object”,它会起作用。
【讨论】:
【参考方案2】:我必须在特定位置插入一个列表,以下解决方案对我有用。
由于某种原因,pandas 在应用函数中返回列表/数组时不会抱怨:
df.loc[0,'A'] = df.loc[0,A].apply(lambda x: ['a', 'b', 'c', 'd'])
【讨论】:
【参考方案3】:如果您传递一个列表,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]
【讨论】:
【参考方案4】:我认为您可能需要事先更新您的字典,然后才能使用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']
【讨论】:
【参考方案5】:在构造函数中使用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 项转换为列表,然后将其传递给构造函数:
df = pd.DataFrame(list(mapping_dict.items()),columns=['Key','Value'])
【讨论】:
以上是关于在熊猫数据框单元格中插入列表的主要内容,如果未能解决你的问题,请参考以下文章