gpt4 book ai didi

python - pandas to_json() 多余的反斜杠

转载 作者:行者123 更新时间:2023-12-01 00:05:04 40 4
gpt4 key购买 nike

我有一个包含电影数据的“.csv”文件,我正在尝试将其重新格式化为 JSON 文件以在 MongoDB 中使用它。所以我将该 csv 文件加载到 pandas DataFrame 中,然后使用 to_json 方法将其写回。DataFrame 中的一行如下所示:

In [43]: result.iloc[0]
Out[43]:
title Avatar
release_date 2009
cast [{"cast_id": 242, "character": "Jake Sully", "...
crew [{"credit_id": "52fe48009251416c750aca23", "de...
Name: 0, dtype: object

但是当pandas写回来的时候,它就变成这样了:

{   "title":"Avatar",
"release_date":"2009",
"cast":"[{\"cast_id\": 242, \"character\": \"Jake Sully\", \"credit_id\": \"5602a8a7c3a3685532001c9a\", \"gender\": 2,...]",
"crew":"[{\"credit_id\": \"52fe48009251416c750aca23\", \"department\": \"Editing\", \"gender\": 0, \"id\": 1721,...]"
}

如您所见,“cast”和“crew”是列表,它们有大量多余的反斜杠。这些反斜杠出现在 MongoDB 集合中,导致无法从这两个字段中提取数据。

除了将 \" 替换为 " 之外,如何解决此问题?

P.S.1:这就是我将 DataFrame 保存为 JSON 的方式:

result.to_json('result.json', orient='records', lines=True)

更新1:显然 pandas 做得很好,问题是由原始 csv 文件引起的。它们的样子如下:

movie_id,title,cast,crew
19995,Avatar,"[{""cast_id"": 242, ""character"": ""Jake Sully"", ""credit_id"": ""5602a8a7c3a3685532001c9a"", ""gender"": 2, ""id"": 65731, ""name"": ""Sam Worthington"", ""order"": 0}, {""cast_id"": 3, ""character"": ""Neytiri"", ""credit_id"": ""52fe48009251416c750ac9cb"", ""gender"": 1, ""id"": 8691, ""name"": ""Zoe Saldana"", ""order"": 1}, {""cast_id"": 25, ""character"": ""Dr. Grace Augustine"", ""credit_id"": ""52fe48009251416c750aca39"", ""gender"": 1, ""id"": 10205, ""name"": ""Sigourney Weaver"", ""order"": 2}, {""cast_id"": 4, ""character"": ""Col. Quaritch"", ""credit_id"": ""52fe48009251416c750ac9cf"", ""gender"": 2, ""id"": 32747, ""name"": ""Stephen Lang"", ""order"": 3},...]"

我尝试用 " 替换 "" (我真的想避免这种黑客行为):

sed -i 's/\"\"/\"/g'

当然,当再次将其读取为 csv 时,它会导致某些数据行出现问题:

ParserError: Error tokenizing data. C error: Expected 1501 fields in line 4, saw 1513

所以我们可以得出这样的结论:这种盲目替换是不安全的。有什么想法吗?

P.S.2:我使用的是kaggle的5000部电影数据集:https://www.kaggle.com/carolzhangdc/imdb-5000-movie-dataset

最佳答案

我遇到了同样的问题:解决方案只需 3 个步骤

1- 数据框形式 csv 或在我的例子中来自 xlsx:

 excel_df= pd.read_excel(dataset ,sheet_name=my_sheet_name)

2- 转换为 json(如果数据中有日期)

json_str = excel_df.to_json(orient='records' ,date_format='iso')

3-最重要的事情:json.loads **** 就是它!

parsed = json.loads(json_str)

4-(可选)您可以写入或发送 json 文件:例如:本地写入

with open(out, 'w') as json_file:
json_file.write(json.dumps({"data": parsed}, indent=4 ))

更多信息: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_json.html

关于python - pandas to_json() 多余的反斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60029873/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com