【问题标题】:How to flatten a JSON object within a pandas dataframe如何展平熊猫数据框中的 JSON 对象
【发布时间】:2021-07-17 00:19:30
【问题描述】:

我正在尝试将嵌套的 JSON 文件转换为数据框。数据框现在看起来像这样:

product shelfId
{'product': [{'id': '111', 'quantity': 10}]} aaa
{'product': [{'id': '222', 'quantity': 0}]} bbb

现在我想展平产品列,并得到一个像这样的 df:

productId productQuantity shelfId
111 10 aaa
222 0 bbb

有办法吗?

【问题讨论】:

  • type(df.loc[0,'product']) 的输出是什么?
  • 是迂腐的,那不是 JSON 对象。那是一个 Python dict
  • 这不能回答你的问题吗? stackoverflow.com/questions/46131731/…
  • 好的,我明白了...谢谢!
  • 我尝试了其他方法,df = pd.json_normalize(df['product']) 和 df = pd.DataFrame(df['product'].values.tolist(), index=df 。指数)。但是遇到了另一个问题。我在产品列中有空字典,例如:{'product': []}。拆分时,它会显示“列表”对象没有属性“值”。有没有办法解决这个问题? (抱歉对熊猫有点陌生)

标签: python pandas


【解决方案1】:

我会应用一个自定义函数来创建一个 dict 列表,然后转换为数据框并添加到旧的 df 中。

def flatten(d):
    newd = {}
    for k, v in d.items():
        for ik, iv in v.items():
            newd[f'{k}{ik.title()}'] = iv
    return newd

cols = pd.DataFrame([flatten(v) for v in df['product']])
df = df.concat([df, cols]).drop(columns=['product'])

【讨论】:

    猜你喜欢
    • 2020-04-30
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 2019-08-03
    • 2017-02-15
    • 1970-01-01
    相关资源
    最近更新 更多