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

pandas中如何对含两个小数点的字符串列高效执行lambda函数

逐行判断需求的最高效实现

优先用pandas向量化字符串操作做筛选,不要用逐行遍历判断,性能差距可达数十倍:

  • 首先用str.count('\.')统计目标列每个字符串的小数点数量,生成布尔掩码
  • 用掩码筛选符合条件的行,再运行自定义lambda函数即可

示例代码:

import pandas as pd

# 假设目标列名为code
# 生成布尔掩码:匹配含2个小数点的元素
mask = df['code'].str.count(r'\.') == 2
# 对符合条件的行执行lambda,这里以拆分双小数点字符串为例
df.loc[mask, 'code'] = df.loc[mask, 'code'].apply(lambda x: f"{x.split('.')[0]}_{x.split('.')[1]}")

该写法为纯向量化筛选,仅对符合条件的元素执行lambda,适合不确定列格式的场景


整列格式统一场景的最优写法

根据你提到的「只要列存在1个双小数点元素,整列都是该格式」的规则,可以仅判断列的第一个非空元素,无需逐行扫描,性能开销最低:

# 取出目标列的非空序列
valid_series = df['code'].dropna()
# 仅做一次判断,符合条件就整列执行lambda
if not valid_series.empty and valid_series.iloc[0].count('.') == 2:
    df['code'] = df['code'].apply(lambda x: 你的自定义逻辑)

如果你的lambda逻辑可以替换为pandas原生向量化字符串操作,建议替换,性能还能再提升一个量级,比如拆分双小数点字符串可以直接用str.split实现,不需要用apply:

df[['part1', 'part2', 'part3']] = df['code'].str.split('.', expand=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:06:03