You need to enable JavaScript to run this app. Python Pandas DataFrame字符串拼接操作内存优化方法咨询
优惠活动
大模型
产品
解决方案
定价
更多

Python Pandas DataFrame字符串拼接操作内存优化方法咨询

大体积DataFrame轻量化操作方案

1. 多列拼接生成新列

原有+拼接方式处理百万行级以上数据时,会产生大量临时中间对象,内存开销高、执行效率低。推荐使用pandas内置的str.cat()方法实现,同场景下性能提升30%以上,内存占用更低:

df['New_col'] = df['CNPJ'].astype(str).str.cat(
    [df['UF_DEST'].astype(str), df['MES'].astype(str)], 
    sep='-'
)

额外优化点:

  • 读取文件时直接指定对应列为字符串类型,避免后续重复做类型转换:
# 读取阶段指定类型
df = pd.read_csv("目标文件路径", dtype={"CNPJ": str, "UF_DEST": str})
# 拼接时仅需对MES列做类型转换
df['New_col'] = df['CNPJ'].str.cat([df['UF_DEST'], df['MES'].astype(str)], sep='-')
  • 若数据量超过内存容量,使用分块读取逐段处理:
chunk_res = []
for chunk in pd.read_csv("目标文件路径", chunksize=100000, dtype={"CNPJ": str, "UF_DEST": str}):
    chunk['New_col'] = chunk['CNPJ'].str.cat([chunk['UF_DEST'], chunk['MES'].astype(str)], sep='-')
    chunk_res.append(chunk)
df = pd.concat(chunk_res, ignore_index=True)

2. 新增固定值新列

你当前使用的写法已经是pandas下最简洁的实现之一,若需要避免链式赋值警告、支持流程化链式调用,可以使用assign()方法实现:

# 该方法不会修改原DataFrame,会返回新增列后的新对象
DIMP_1100 = DIMP_1100.assign(New_Col2='1100')

极致性能优化方案

如果数据规模特别大,想要进一步降低内存开销、提升处理速度,可以替换pandas为polars库,同场景下内存占用仅为pandas的1/31/2,处理速度提升25倍,对应实现方式如下:

import polars as pl
# 读取文件
df = pl.read_csv("目标文件路径")
# 多列拼接
df = df.with_columns(
    (pl.col("CNPJ").cast(pl.Utf8) + "-" + pl.col("UF_DEST").cast(pl.Utf8) + "-" + pl.col("MES")).alias("New_col")
)
# 新增固定值列
df = df.with_columns(New_Col2=pl.lit("1100"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 04:54:03