python - Pandas 将嵌入 JSON 的 CSV 读取到数据框中
问题描述
我需要使用 Pandas 读取 CSV 文件,并且 CSV 中的一列是 JSON 数据。但是,一旦我引入文件,JSON 就会损坏(?),我无法使用json_normalize()
它。
我无法附加该文件,但这里有一些演示该问题的示例代码:
df = pd.DataFrame({'location_id':[1,2,3], 'visits':[{"ABCD":9,"DEFG":8,"ASDF":6},
{"XYZR":4,"ABCD":4},
{"ASDF":4}]})
pd.json_normalize(df.visits)
# OUTPUTS THE NORMALIZED JSON JUST FINE
df.to_csv('test_visits.csv')
df2 = pd.read_csv('test_visits.csv')
pd.json_normalize(df2.visits)
# RESULTS IN ERROR:
# AttributeError: 'str' object has no attribute 'values'
有什么我遗漏的东西read_csv()
可以让 JSON 保持可用吗?
先感谢您。
解决方案
In [77]: df = pd.DataFrame({'location_id':[1,2,3], 'visits':[{"ABCD":9,"DEFG":8,"ASDF":6},
...: {"XYZR":4,"ABCD":4},
...: {"ASDF":4}]})
In [78]: df
Out[78]:
location_id visits
0 1 {'ABCD': 9, 'DEFG': 8, 'ASDF': 6}
1 2 {'XYZR': 4, 'ABCD': 4}
2 3 {'ASDF': 4}
In [79]: pd.json_normalize(df["visits"])
Out[79]:
ABCD DEFG ASDF XYZR
0 9.0 8.0 6.0 NaN
1 4.0 NaN NaN 4.0
2 NaN NaN 4.0 NaN
发生这种情况是因为一旦您写入 csv 并从 csv 读取它,pandas 会将其读取为字符串。因此,当您尝试对其进行规范化时,它会抛出错误说str
对象没有属性values
,因为它不是 json 对象
推荐阅读
- reporting-services - 如何使用报表服务 web 服务上传图像
- hive - 在和不在 HiveQL 中
- apache-kafka - ProducerFencedException 处理 Kafka 流
- html - 在 Bootstrap 4 中设备较小时固定表列
- php - Ubuntu 18.04升级后php7.2-curl无法安装
- ruby-on-rails - Heroku CI 测试应用程序删除 /spec 目录
- python - 带有扭曲的 Python 节拍器:如何传递参数进行迭代?
- asp.net - ASP.NET "auth" cookie 值更改,但旧值仍然有效
- angular - Angular 5 httpClient 既有 HttpHeaders 又有 Response 对象?
- javascript - React Native 听写在 iOS 上突然断词