【问题标题】:How to extract a json from a pandas dataframe? [closed]如何从熊猫数据框中提取 json? [关闭]
【发布时间】:2021-01-18 10:39:49
【问题描述】:

我有一个 pandas 数据框,其中一列中有一个代表 json 的字符串:

|-----------------------------|
|{"name": "John", "age": "32"}|
|None                         |
|{"name": "Mary", "age": "29"}|

我需要为姓名和年龄创建新列并从此 json 中提取数据。 注意:可能是空值,缺少键。

【问题讨论】:

  • 引号是在大括号里面还是外面?
  • 这不是 JSON。在 JSON 中,字符串必须用双引号括起来。
  • 如果是像'{"name": "John", "age": 32}'这样的json而不是上面的,我给出了答案
  • @user2827262 显然,您回答了其他问题。

标签: python python-3.x pandas


【解决方案1】:

如果 json 字符串如下所示,试试这个:

import pandas as pd
import json

df = pd.DataFrame({'your_column_name':['{"name": "John", "age": 32}', None, '{"name": "Mary", "age": 29}']})
list_of_jsons = df.your_column_name.to_list()
list_of_jsons = [json.loads(s) if s else {"name": None, "name": None} for s in list_of_jsons]
df2 = pd.DataFrame(list_of_jsons)
df = pd.concat([df,df2], axis=1)

否则,您在每一行中拥有的是一个包含一个字符串的集合。您需要使用 str.split() 方法解析该字符串并创建自己的字典列表(我命名为 list_of_jsons 的变量)并创建 df2 并像上面一样连接。

【讨论】:

    【解决方案2】:

    创建几个名为“name”和“age”的新列。将函数应用于列数据框并将内容解析为带有 try/except 块的 json。如果有值,则将其分配给名称/年龄列,如果没有值或值为空,则将名称/年龄列中的值相应地设置为无。

    将函数应用于列: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html

    解析json: https://www.programiz.com/python-programming/json

    【讨论】:

      猜你喜欢
      • 2018-04-15
      • 2019-03-24
      • 1970-01-01
      • 2015-03-11
      • 2022-07-12
      • 2021-05-25
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多