我的数据在 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: Expecting ',' delimiter: line 1 column 30 (char 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 完全陌生
最佳答案
不确定这是否是 JSON 问题的原因,但您可以轻松地将双引号替换为 pandas 中的单引号,如下所示:
df["列名"] = df["列名"].str.replace('"', "'")
关于python - 将 JSON 读入 Python/Pandas - 获取 JSONDecodeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54798562/