pd.read_csv()字符串解析提速25–35%,但仅限dtype为'string'且清洗紧接读取时;object列groupby、未设dtype、链式assign仍慢;关键优化是usecols+dtype、category转换和避免链式赋值。

pd.read_csv() 里的字符串解析快,但仅限于「读入后立刻做字符串清洗」那段;真正拖慢清洗速度的环节,在 3.11 里基本没变。
pd.read_csv() 字符串解析提速真实有效,但有严格前提
- 加速只发生在 CSV 解析阶段中调用 Python 字符串方法的部分,比如:
str.replace()、str.split()、str.extract()的底层实现 - 必须满足:列 dtype 是
'string'(不是'object'),否则 pandas 仍走旧路径,不触发 3.11 优化的字符串调用栈 - 实测提升约 25–35%,前提是字段量大(如百万行地址/日志)、且清洗逻辑紧接在
read_csv()后执行 - 如果中间穿插了
df.copy()、df.loc[...]或类型转换,加速会被稀释甚至抵消
object 列的 groupby、未设 dtype、链式 assign 依然很慢
-
df.groupby('status')在status是object类型时,瓶颈在 pandas 自身的 Python 层逻辑,3.11 的解释器优化覆盖不到 -
dtype不设导致内存暴涨 → 后续所有操作(包括fillna、dropna)都变慢,3.11 不解决内存问题 -
df.loc[mask].assign(x=lambda d: d.y + 1)这类写法会隐式创建中间 DataFrame,3.11 反而因对象创建更多(如新字典、新帧栈)略慢
比换版本更关键的三件事,3.10 和 3.11 上效果完全一致
-
usecols和dtype一起用:pd.read_csv(..., usecols=['uid','ts'], dtype={'uid': 'category', 'ts': 'string'}) - 高重复字符串列尽早转
category:df['city'].astype('category'),后续groupby可快 5–20× - 避免链式赋值,改用显式索引:
mask = df.x > 0; df.loc[mask, 'y'] = df.loc[mask, 'x'] * 2
真正卡住数据清洗速度的,从来不是解释器,而是你让 pandas 做了多少次无谓拷贝和类型推断。3.11 的加速只作用于“它能看见”的那部分——也就是你写的纯 Python 字符串操作,而且得写得足够直白、足够稳定。


















