如何将非标准JSON文件转换为含ID和Text列的Pandas DataFrame?
问题描述
我通过以下代码读取了一个JSON文件:
# Import libraries import json import pandas as pd # Load the data with open('data.json') as user_file: file_contents = user_file.read()
打印结果如下:
print(file_contents) >> {"id": 0, "text": "Nicklikes football"} {"id": 1, "George likes basketball"} {"id": 2, "text": "John likes swimming"}
我希望创建一个DataFrame,第一列为ID,另一列为Text。尝试了以下代码但未成功:
texts = [{'Id': file_contents[k][i]['id'], 'Text': file_contents[k][i]['text']} for k in file_contents for i in range(len(file_contents[k]))] dt = pd.DataFrame.from_dict(texts)
请问该如何实现此需求?
问题分析
你的数据是JSON Lines格式(每行一个独立JSON对象),但直接用read()得到的是字符串,无法像字典一样直接索引。另外第二行JSON存在格式错误,缺失键名text,需要先修正。
解决方法
1. 修正原JSON文件格式
确保data.json的每一行都是合法JSON对象,第二行需改为:
{"id": 1, "text": "George likes basketball"}
2. 两种实现方式
方式一:逐行解析JSON
import json import pandas as pd data_list = [] with open('data.json') as user_file: # 逐行读取并解析 for line in user_file: if line.strip(): # 跳过空行 data = json.loads(line) data_list.append({'Id': data['id'], 'Text': data['text']}) dt = pd.DataFrame(data_list) print(dt)
方式二:用pandas直接读取
pandas支持直接读取JSON Lines格式,只需指定lines=True参数:
import pandas as pd # 读取文件并重命名列 dt = pd.read_json('data.json', lines=True) dt = dt.rename(columns={'id': 'Id', 'text': 'Text'}) print(dt)
最终结果
执行后会得到目标DataFrame:
Id Text 0 0 Nicklikes football 1 1 George likes basketball 2 2 John likes swimming
内容的提问来源于stack exchange,提问作者John Angelopoulos
相关产品推荐
相关产品推荐

