将字典解包到单个 DataFrame 中

Posted

技术标签:

【中文标题】将字典解包到单个 DataFrame 中【英文标题】:Unpack Dictionary into Single DataFrame 【发布时间】:2019-04-30 08:54:30 【问题描述】:

我有一个复杂的字典,我想将它解压缩到单个 DataFrame 中,但我无法弄清楚。 我想将'rows'中包含的数据(即所有都包含在[]中)解压缩到单个DataFrame('rows')中 我尝试了很多在字典中访问的组合都无济于事。

这是数据:

None: 'transfers': '1': 'rows': ['pointOfSaleID': 2,
  'initialAmount': '£0.00',
  'opened': 'xx, 27/11/2018 11:58',
  'dayIncome': '£336.23',
  'cash': ['dateTime': '27/11/2018 18:23',
    'employeeName': 'xx',
    'sum': '-£45.00',
    'comment': 'cabs to collect in store stock\nEvents'],
  'cashTotal': '£291.23',
  'cashExpected': '£291.23',
  'closed': 'xx, 27/11/2018 20:54',
  'banked': '£0.00',
  'left': '£0.00',
  'totalCounted': '£0.00',
  'difference': '-£291.23',
  'varianceReason': '',
  'totalTransactions': 48,
 'pointOfSaleID': 2,
  'initialAmount': '£0.00',
  'opened': 'xx, 28/11/2018 09:16',
  'dayIncome': '£35.94',
  'cashTotal': '£35.94',
  'cashExpected': '£35.94',
  'closed': '----',
  'banked': '----',
  'left': '----',
  'totalCounted': '----',
  'difference': '----',
  'varianceReason': '',
  'totalTransactions': 3...]

如何仅访问行中的数据并将其解压缩到 DataFrame 中?

【问题讨论】:

你试过 df = pd.DataFrame(data[None]['transfers']['1']['rows']) 其中 data 是一个包含你的数据的字典吗?跨度> 【参考方案1】:

from_dict 函数应该适用于您的情况。以下文档非常好:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.from_dict.html

【讨论】:

我不认为to_dict 在这里有用。 OP 想要将 list/dict 结构的某些部分转换为 DataFrame - to_dict 与此相反。 你是对的,我的错。它应该是 from_dict。我将编辑回复。【参考方案2】:

假设您的字典名为“d”,这应该会得到嵌套字典的列表,每条记录(每行)一个字典:

d[None]['transfers']['1']['rows']

您应该能够将其传递给 DataFrame 构造函数:

df = pd.DataFrame(d[None]['transfers']['1']['rows'])

如果可行,您最终将在cash 列的每个条目中得到嵌套字典。为了解决这个问题,我会把你指向[json_normalize](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.io.json.json_normalize.html),这个SO线程可能会帮助你理解:pandas.io.json.json_normalize with very nested json

【讨论】:

@lmonty,很高兴听到这个消息!

以上是关于将字典解包到单个 DataFrame 中的主要内容,如果未能解决你的问题,请参考以下文章

Python - 字典理解中的元组解包

将字典值增量添加到 pandas DataFrame。具有dict键列名的DataFrame

python:将字符串解包到列表中

如何将子列表中的数据解包到一个列表中? [复制]

如何将一个数组的值解包到另一个数组的特定索引中?

Python将包含列表元组的字符串解包到变量