【问题标题】:Extracting str from pandas dataframe using json使用json从pandas数据框中提取str
【发布时间】:2021-07-18 13:35:10
【问题描述】:

我将 csv 文件读入名为 df 的数据帧中

每一行都包含下面的str。

'{"id":2140043003,"name":"Ollallo Rubio",...}'

我想从每一行中提取“name”和“id”并创建一个新的数据框来存储 str。

我使用以下代码提取但显示错误。如果对如何解决此问题有任何建议,请告诉我。谢谢

JSONDecodeError: 需要 ',' 分隔符:第 1 行第 32 列 (char 31)

【问题讨论】:

  • 您确定creator 中的每个JSON 格式都有效吗?因为从您提供的部分示例中,您的代码有效。

标签: python json python-3.x pandas dataframe


【解决方案1】:
text={
    "id": 2140043003,
    "name": "Olallo Rubio",
    "is_registered": True,
    "chosen_currency": 'Null',
    "avatar": {
        "thumb": "https://ksr-ugc.imgix.net/assets/019/223/259/16513215a3869caaea2d35d43f3c0c5f_original.jpg?w=40&h=40&fit=crop&v=1510685152&auto=format&q=92&s=653706657ccc49f68a27445ea37ad39a",
        "small": "https://ksr-ugc.imgix.net/assets/019/223/259/16513215a3869caaea2d35d43f3c0c5f_original.jpg?w=160&h=160&fit=crop&v=1510685152&auto=format&q=92&s=0bd2f3cec5f12553e679153ba2b5d7fa",
        "medium": "https://ksr-ugc.imgix.net/assets/019/223/259/16513215a3869caaea2d35d43f3c0c5f_original.jpg?w=160&h=160&fit=crop&v=1510685152&auto=format&q=92&s=0bd2f3cec5f12553e679153ba2b5d7fa"
    },
    "urls": {
        "web": {
            "user": "https://www.kickstarter.com/profile/2140043003"
        },
        "api": {
            "user": "https://api.kickstarter.com/v1/users/2140043003?signature=1531480520.09df9a36f649d71a3a81eb14684ad0d3afc83e03"
        }
    }
}
def extract(text,*args):
    list1=[]
    for i in args:
        list1.append(text[i])
    return list1
    
print(extract(text,'name','id'))
# ['Olallo Rubio', 2140043003]

【讨论】:

    【解决方案2】:

    这是我使用pandas.json_normalize() 得出的结论:

    import pandas as pd
    
    sample = [{
    "id": 2140043003,
    "name":"Olallo Rubio",
    "is_registered": True,
    "chosen_currency": None,
    "avatar":{
            "thumb":"https://ksr-ugc.imgix.net/assets/019/223/259/16513215a3869caaea2d35d43f3c0c5f_original.jpg?w=40&h=40&fit=crop&v=1510685152&auto=format&q=92&s=653706657ccc49f68a27445ea37ad39a",
            "small":"https://ksr-ugc.imgix.net/assets/019/223/259/16513215a3869caaea2d35d43f3c0c5f_original.jpg?w=160&h=160&fit=crop&v=1510685152&auto=format&q=92&s=0bd2f3cec5f12553e679153ba2b5d7fa",
            "medium":"https://ksr-ugc.imgix.net/assets/019/223/259/16513215a3869caaea2d35d43f3c0c5f_original.jpg?w=160&h=160&fit=crop&v=1510685152&auto=format&q=92&s=0bd2f3cec5f12553e679153ba2b5d7fa"
            },
    "urls":{
            "web":{
                    "user":"https://www.kickstarter.com/profile/2140043003"
            },
            "api":{
                    "user":"https://api.kickstarter.com/v1/users/2140043003?signature=1531480520.09df9a36f649d71a3a81eb14684ad0d3afc83e03"
            }
        }
    }]
    
    # Create datafrane
    df = pd.json_normalize(sample)
    
    # Select columns into new dataframe.
    df1 = df.loc[:, ["name", "id",]]
    

    查看df1:

    输入:

    print(df1)
    

    输出:

               name          id
    0  Olallo Rubio  2140043003
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-22
      • 2020-08-11
      • 1970-01-01
      • 2018-07-23
      • 1970-01-01
      • 2020-04-01
      • 1970-01-01
      相关资源
      最近更新 更多