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

如何高效读取含timedelta与NaN的CSV文件?

优化Pandas读取大规模时间差CSV的速度

嘿,我完全懂处理超大CSV时applymap慢到让人抓狂的感觉——逐元素转换本来就不是Pandas的强项,咱们换几个向量化/批量处理的方案,速度能提升一大截:

方案1:读取时直接转换(最推荐)

与其先把所有数据读成object类型再事后转换,不如在read_csv阶段就完成转换,利用Pandas的批量处理能力:

import pandas as pd

# 先获取所有需要转换的数据列(跳过索引列)
data_cols = pd.read_csv('file.csv', nrows=0).columns[1:]

# 为每个数据列指定转换函数
converters = {col: pd.to_timedelta for col in data_cols}

# 读取CSV时直接完成转换
df = pd.read_csv('file.csv', sep=',', index_col=0, converters=converters)

这个方法的优势是边读边转,不需要额外的内存存储原始object类型数据,而且是按列批量处理,比逐元素操作快得多。

方案2:已读入DataFrame时的批量转换

如果已经把数据读成了object类型的DataFrame,别用applymap,改用向量化的pd.to_timedelta批量处理:

# 假设df是已读入的object类型DataFrame
df = pd.to_timedelta(df.stack()).unstack()

这里用stack()把整个DataFrame压缩成一个Series,然后一次性用pd.to_timedelta转换所有元素,最后unstack()还原成原来的行列结构。这种向量化操作的速度比applymap快几个数量级,因为它是底层用C实现的,而非Python层面的逐元素循环。

额外提醒

  • 两种方案都会自动把原始的NaN转换成时间差类型的NaT,和你原来的需求完全匹配。
  • 如果你的文件大到Pandas内存都扛不住,可以试试dask.dataframe做并行处理,但上面的两个方案基本能覆盖绝大多数场景了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:40:26