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

Python Pandas生成Excel与JSON输出字符数不一致问题求助

问题排查与代码优化方案

核心问题分析

你遇到的字符缺失大概率是以下两个原因之一,结合你给出的字符数(缺失后30438,接近32767),Excel单元格字符上限是最可能的诱因:

  • Excel的.xlsx格式单个单元格最多支持32767个字符,超出部分会被自动截断
  • pd.json_normalize处理嵌套JSON时,可能丢失深层结构或压缩数组内容

分步排查与解决

1. 确认数据是否进入DataFrame

在导出Excel前,先对比DataFrame和原始数据的内容长度,定位问题环节:

# 在df = pd.json_normalize(res)之后添加
# 替换成你观察到缺失的字段名
print("DataFrame目标字段长度:", len(df.iloc[0]['目标字段名']))
print("原始data对应内容长度:", len(json.dumps(res[0])))

如果两者长度一致,说明问题出在Excel导出环节;如果不一致,就是json_normalize的扁平化处理丢失了数据。

2. 解决Excel字符限制问题

如果是Excel的字符上限导致,有两种实用方案:

  • 改用CSV格式导出:CSV没有单元格字符限制,可完整保留所有内容
    df.to_csv('MyGreatExcelFile.csv', index=False, header=True)
    
  • 拆分超长内容:如果必须用Excel,可将超长字段按固定长度拆分(或保留为多行),避免截断

3. 修复JSON扁平化丢失数据的问题

如果json_normalize丢失了嵌套数据,改用直接存储JSON字符串的方式,避免扁平化导致的内容丢失:

# 替换原来的df = pd.json_normalize(res)
df = pd.DataFrame({'raw_data': [json.dumps(item) for item in res]})
# 替换所有换行符
df['raw_data'] = df['raw_data'].str.replace(r'[\r\n]', '|', regex=True)

4. 确保API请求获取完整数据

虽然加了time.sleep(0.5),仍需确认请求是否成功且完整:

# 在r = requests.request(...)之后添加
if r.status_code != 200:
    print(f"请求失败,状态码: {r.status_code},URL: {url}")
    continue
# 检查响应内容与解析后JSON的长度是否一致
raw_len = len(r.text)
json_len = len(json.dumps(data))
if raw_len != json_len:
    print(f"警告: {myUrl} 的响应可能被截断")

优化后的完整代码

import requests
import json
import time
import pandas as pd

# 读取URL ID,用原生文件操作更简洁
with open("url_ids.txt", "r") as f:
    url_list = [line.strip() for line in f if line.strip()]

res = []

for url_id in url_list:
    url = f"https://myrandomwebsite.com/api/v3/event/{url_id}/teams"
    headers = {
        # 填入你的headers内容
    }
    
    try:
        r = requests.get(url, headers=headers)
        r.raise_for_status()  # 主动触发HTTP错误
        data = r.json()
        
        # 验证数据完整性
        if len(r.text) != len(json.dumps(data)):
            print(f"警告: {url_id} 的响应可能不完整")
        
        res.append(data)
        time.sleep(0.5)
    except Exception as e:
        print(f"处理 {url_id} 时出错: {str(e)}")
        continue

# 直接存储原始JSON字符串,避免扁平化丢失数据
df = pd.DataFrame({'raw_data': [json.dumps(item) for item in res]})
df['raw_data'] = df['raw_data'].str.replace(r'[\r\n]', '|', regex=True)

# 用CSV导出避免Excel字符限制
df.to_csv('MyGreatExcelFile.csv', index=False, header=True)

# 若必须用Excel,需先处理超长字段再导出
# df.to_excel('MyGreatExcelFile.xlsx', sheet_name='MyGreatExcelFile', header=True)

内容的提问来源于stack exchange,提问作者BulkingBaguette

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:33:22