【问题标题】:Parsing multiple dictionary columns in a dataframe to separate columns解析数据框中的多个字典列以分隔列
【发布时间】:2020-01-28 10:04:35
【问题描述】:

我有一个 pandas 数据框,它有一列包含多个字典值。

我使用 pd.series 将这些 dict 扁平化为单独的列。现在一列被分成 14 列。但它在每行 14 列中仍然有字典值。

以A、B、C..的方式有14列的样本数据:

index     A                                                                                  B                                                                C
  0      {'field_name': 'Supplier Name',                                            {'field_name': 'BG', 'user_value': None,                              {'field_name': 'VATNumber', 'user_value': None,
         'user_value': None, 'value' : 'ABCD'}                         'value': '764065'}                                                   'value': 'SE1234556'}

如何进一步将它们提取为单独的列,如下所示:

field_name               user_value      value
Supplier Name            None            ABCD
BG                       None            764065         
VATNumber                None            SE1234556

代码:

df = pd.DataFrame(data) #data is a list of 'values'
df1 = df['values'].apply(pd.Series)
#naming the multiple columns as A, B..
column_names = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O']
df1 = pd.DataFrame(df1.values, columns = column_names)

【问题讨论】:

  • 一些示例数据会很可爱:)
  • 如果你使用系列,那么你只会得到一维系列,你能分享你的代码吗?
  • 如果您可以以文本方式粘贴数据,我们将更容易复制。无论如何,你可以试试:new_df = pd.DataFrame(df.values.flatten().tolist())
  • 请勿发布图片,将数据以文本形式发布,以便他人轻松复制复制
  • 图片不存在。

标签: python pandas dataframe dictionary


【解决方案1】:

您可以使用 json_normalize 将 dict 标准化为列

from pandas.io.json import json_normalize
pd.concat([json_normalize(df[c]) for c in df])

    field_name      user_value  value
0   Supplier Name   None        ABCD
0   BG              None        764065
0   VATNumber       None        SE1234556

【讨论】:

  • 我收到一个错误:AttributeError: 'float' object has no attribute 'items'
  • 请提供代码以重现您的输入数据框。此解决方案适用于您提供的示例。
  • 我解决了。必须删除数据框中的 NaN 值。非常感谢!
猜你喜欢
  • 2017-03-28
  • 2021-11-24
  • 2020-07-09
  • 2020-08-28
  • 1970-01-01
  • 1970-01-01
  • 2016-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多