如何用Pandas read_json函数转换Scrapy生成的JSON Lines文件?
解决Pandas读取JSON Lines格式文件的问题
我之前也踩过这个坑!JSON Lines(每行一条独立JSON记录)的格式和Pandas默认预期的JSON结构不一样,用orient='index'完全找错方向了——那个参数是给索引映射列值的嵌套结构用的,根本不适合JSON Lines。
正确的解决方法:用lines=True参数
Pandas专门提供了lines=True参数来处理每行一个JSON对象的情况,直接指定这个参数就能正确解析你的input.json:
import pandas as pd # 读取JSON Lines格式的文件 df = pd.read_json('input.json', lines=True)
举个实际例子,假设你的input.json内容是:
{"id": 1, "title": "Scrapy入门", "author": "reyman64"}
{"id": 2, "title": "Pandas技巧", "author": "data_dev"}
运行上面的代码后,生成的DataFrame会是标准的表格结构:
| id | title | author |
|---|---|---|
| 1 | Scrapy入门 | reyman64 |
| 2 | Pandas技巧 | data_dev |
为什么orient='index'不行?
再帮你理清逻辑:orient='index'对应的是这种嵌套结构的JSON:
{ "row1": {"col1": "val1", "col2": "val2"}, "row2": {"col1": "val3", "col2": "val4"} }
它是外层用索引键映射每行数据,和JSON Lines的“每行独立JSON对象”完全是两种格式,所以用这个参数自然会得到不符合预期的结果。
另外,如果你的JSON Lines里有部分行缺失字段,Pandas也会自动用NaN填充对应的单元格,完全不用额外处理~
内容的提问来源于stack exchange,提问作者reyman64




