【问题标题】:Reading JSON into Python / Pandas - getting JSONDecodeError将 JSON 读入 Python / Pandas - 获取 JSONDecodeError
【发布时间】:2019-07-14 20:44:34
【问题描述】:

我的数据在 json 中有几列,但我需要将每一列转换为 Pandas 数据框中的多列(因此每个新列都是一个键,每一行都是与该行关联的值)。

我创建了这个函数:

def convert_json_columns(df):
    cat_df = df['category'].apply(json.loads)
    cat_df = pd.DataFrame(cat_df.tolist()).add_prefix('category_')
    return pd.merge(df, cat_df, left_index=True, right_index=True, how='outer')

它适用于 2/5 列,但 json.loads() 向我正在转换的其他列抛出错误,说它需要一个“,”:

JSONDecodeError: 需要 ',' 分隔符:第 1 行第 30 列(字符 29)

我想我会尝试手动将此列转换为字典,因为 json 似乎有效(我将其粘贴到此工具 here 中,它说它是有效代码)。我不能在这里粘贴它,因为它有个人信息。

所以我尝试通过将“null”替换为“None”来将其转换为 python 字典,其他所有内容似乎都应该转换得很好。完成后,我可以很容易地将字符串转换为字典。例如:

发件人:

{"id":101531536,"name":null,"is_registered":null,"chosen_currency":null}

到:

{"id":101531536,"name":None,"is_registered":None,"chosen_currency":None}

但是,我随后意识到字符串中有一个带有双引号的值,并且每个值都使用双引号。即:

test_dict = {"id":1635201695,"name":"John "Cowboy" Smith"} ##fake name

所以我有两个问题:

  • 有没有办法只将此字符串中的值内的双引号转换为单引号,然后再将其转换为字典?
  • 值字符串中的这个双引号会是导致 json 错误的原因吗?我对 python 很陌生,对 json 完全陌生

【问题讨论】:

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


    【解决方案1】:

    不确定这是否是导致 JSON 问题的原因,但您可以轻松地将双引号替换为 pandas 中的单引号,如下所示:

    df["column name"] = df["column name"].str.replace('"', "'")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-07
      • 2015-07-04
      • 1970-01-01
      • 2017-09-25
      • 2018-06-23
      • 2023-04-04
      • 1970-01-01
      • 2021-09-26
      相关资源
      最近更新 更多