如何无for循环优化Pandas多列字符串长度计算查询?
优化Pandas多列字符串长度计算(替代for循环)
直接用Pandas的矢量化操作就能替代for循环,大幅提升处理效率,核心思路是一次性对整个DataFrame执行类型转换和长度计算,而非逐列循环处理。
方案一:分步实现(可读性高)
import pandas as pd # 1. 一次性将所有列转为string类型并计算每行字符串长度 lengths_df = df.astype("string").str.len() # 2. 给结果列重命名为len0、len1...格式 lengths_df.columns = [f"len{idx}" for idx in range(len(lengths_df.columns))] # 3. 将计算结果合并回原DataFrame df = pd.concat([df, lengths_df], axis=1)
方案二:简洁合并写法
如果追求代码紧凑,可以把步骤合并成一行:
df = pd.concat( [df, df.astype("string").str.len().rename(columns=lambda col: f"len{df.columns.get_loc(col)}")], axis=1 )
关键优势
Pandas的矢量化操作基于底层C语言实现,避免了Python循环的解释器开销,40列的场景下处理速度会比原循环快数倍甚至更多。
可选优化:仅处理目标列
如果不是所有列都需要计算长度,可以先筛选出目标列再操作,进一步节省资源:
# 假设只需要处理col1、col2、col3这几列 target_cols = ["col1", "col2", "col3"] lengths_df = df[target_cols].astype("string").str.len() lengths_df.columns = [f"len{idx}" for idx in range(len(lengths_df.columns))] df = pd.concat([df, lengths_df], axis=1)
内容的提问来源于stack exchange,提问作者Fernando Trujillo
相关产品推荐
相关产品推荐

