【发布时间】: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