将JSON读入Python / Pandas-获取JSONDecodeError

时间:2019-02-21 02:59:38

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

我的数据在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完全陌生

1 个答案:

答案 0 :(得分:0)

不确定是不是JSON问题的原因,但是您可以像这样在熊猫中轻松地用双引号替换双引号:

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