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

pandas指定columns构造DataFrame导出CSV数据为空的原因排查

问题根因

你遇到的两个异常都是代码逻辑和pandas接口用法不匹配导致的:

  • 第一列时间小时位截断:pd.read_table默认会自动推断列类型,第一列的时间格式字符串会被自动解析为datetime类型,导出CSV时没有指定时间序列化格式,前置带0的小时位会被默认格式规则截断。
  • 指定列名后数据全空:你是在数据读取完成、生成默认列名为0/1/2的DataFrame之后,再给pd.DataFrame()传入columns=col1参数。这个参数的作用是从现有数据中筛选指定名称的列,原数据里不存在叫time/skin/micro的列,所以最终生成的是只有列名、全为空值的表。
修正后可运行代码
import pandas as pd

file_path = './data/up/34-up.txt'
# 读取阶段直接配置参数,从根源规避两个问题
data = pd.read_table(
    file_path,
    header=None,
    delim_whitespace=True,
    names=["time", "skin", "micro"],  # 读入时直接设置列名,不需要读完再重命名
    dtype={"time": str}  # 强制时间列按原始字符串读取,禁止自动转datetime导致格式截断
)
# 导出时关闭行索引写入,避免生成多余的序号列
data.to_csv('34.csv', index=False)
关键注意点
  • 列名设置要在读取函数内通过names参数完成,不要在DataFrame初始化阶段通过columns参数给已经生成的表设置新列名,后者不会做重命名,只会做列筛选。
  • 对于不需要做时间计算、只需要保留原始格式的时间字符串,显式指定dtype=str可以避免pandas自动类型推断带来的各种格式异常。
  • 导出CSV时默认会把pandas自带的整数行索引写入文件,加index=False可以去掉这列无意义数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 19:56:49