ChatGPT 把 5 万行 CSV 截断到前 1000 行:token 预算导致

上传大 CSV 后问'一共多少行',ChatGPT 自信地说 1000——token 预算截断。要分析整份文件请用 pandas + Code Interpreter。

你上传一份 5 万行的 CSV,问”所有行的平均营收”,ChatGPT 基于前 1000 行作答——总数明显错。两种不同的失败模式都会导致这个:普通对话里 ChatGPT 是把文件部分内容塞进 context,剩下的丢掉;Code Interpreter(Advanced Data Analysis)里文件完整落盘,但模型只对 df.head() 做汇总,没真的跑聚合。修法:强制 pandas 在完整 DataFrame 上执行;超大文件用 chunksize 分块;或者本地预聚合后再上传 rollup。

常见原因

1. 普通对话只采样,不加载

没开 Code Interpreter 时,ChatGPT 读文件就是把部分文本塞进 context。token 预算把这个上限定在大约前 1000-3000 行。后面的所谓”分析”都是外推、不是计算。

如何判断:分析过程没有 Python 工具图标;报告的行数特别整(1000、2000)。

2. Code Interpreter 加载了,但只 print 了 df.head()

在 ADA 里 pandas 能整份读。但 prompt 含糊(“汇总这个文件”),模型默认就 print 前 5 行 + 列信息,再口述结论,从不跑 df.shapedf.describe()

如何判断:代码 cell 里只有 df.head()df.dtypes,没有 df.shape、没有任何聚合。文字里写”based on the sample…“

3. 真正巨大的文件撞沙箱内存上限

2GB CSV、2000 万行会把沙箱内存撑爆,pd.read_csvMemoryError 或者直接 kill kernel。模型为了”让它能跑”会自动加 nrows=1000 重试,然后把这个子集当答案。

如何判断:Code Interpreter 输出里有 kernel restart 或 memory error。

4. chunksize 累加遗漏

chunksize= 读但忘了累加,最终答案只来自最后一块。自定义聚合 prompt 经常踩这个。

5. 列方向被显示截断

pd.set_option("display.max_columns") 默认很低。50 列文件 print 中间是 ...,模型有时会断言那些列”不存在”。

最短修复路径

Step 1:先确认整份文件被加载了

每次都用这段开头:

import pandas as pd
df = pd.read_csv("/mnt/data/big.csv")
print("rows:", df.shape[0])
print("cols:", df.shape[1])
print("memory MB:", df.memory_usage(deep=True).sum() / 1e6)

rows 对得上你预期,文件就完整加载了,后续聚合可信。

Step 2:把 prompt 写成聚合请求,不是汇总请求

用 pandas 加载 /mnt/data/big.csv,打印 df.shape。
然后计算:
  - df["revenue"].sum()
  - df.groupby("region")["revenue"].sum()
  - df["date"].min(), df["date"].max()
给我实际数字,不要采样。

ADA 会逐行执行,答案就是真值。

Step 3:超大文件用 chunksize 流式处理

文件大到放不下:

import pandas as pd

total = 0
n = 0
for chunk in pd.read_csv("/mnt/data/huge.csv", chunksize=200_000):
    total += chunk["revenue"].sum()
    n += len(chunk)

print("rows processed:", n)
print("total revenue:", total)

对求和、计数、大多数 groupby 聚合都管用。百分位需要跨 chunk 保留 partial state。

Step 4:本地预聚合后再上传

内存吃紧或只要 rollup 的,在你机器上先聚合:

# 本地
import pandas as pd
df = pd.read_csv("huge.csv")
rollup = df.groupby(["region","quarter"]).agg(
    rev_sum=("revenue","sum"),
    rev_avg=("revenue","mean"),
    rows=("revenue","count"),
).reset_index()
rollup.to_csv("rollup.csv", index=False)

上传 rollup.csv(几百行)。ChatGPT 立刻能分析,原始数据也不离开你机器。

Step 5:拆成 N 份分别分析

确实需要行级访问、但又装不下时,先拆:

split -l 100000 huge.csv part_

每次一份 + 一个问题;或者全放 Project 里让 ChatGPT 逐份迭代。文件数控制在 10 个以内,检索质量才稳。

预防

  • 重复分析大数据,先在本地用 pandas / DuckDB 建管线,只把聚合结果上传给 ChatGPT。
  • 上传时第一条 prompt 永远包含 df.shape + df.head(),亲眼验证整份文件加载成功。
  • 文件 > 100MB 优先用 Parquet 而不是 CSV——体积小 5-10 倍、读取快、保留 dtype。
  • 临时探索可以采样:df.sample(10_000, random_state=42)——可复现的子集、任何 prompt 都装得下。
  • 大屏 / 周期性报表用 Code Interpreter + 整份文件,但 prompt 永远写成明确的聚合,绝不写”汇总”。

标签: #ChatGPT #ChatGPT 文件 #排查 #排查 #large-file