You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将非标准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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 22:03:24