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

如何高效实现Pandas DataFrame中Name列的字符转换并生成新列?(适配百万级数据)

如何高效处理Pandas中Name列的文本转换?

当然可以实现你的需求,但考虑到你有超过100万条记录,非常不推荐用lambda+apply的逐行处理方式——Pandas的矢量化字符串操作效率要高得多,能帮你节省大量时间。下面是具体的实现思路和代码:

首先,先还原你的原始DataFrame:

import pandas as pd
import numpy as np

d = {'col1': [1, 2,3,4,5,60,0,0,6,3,2,4],
     'col3': [1, 22,33,44,55,60,1,5,6,3,2,4],
     'Name': ['22a| df a1asd_V1', 'xcd a2a_sd_V3','23vg aa_bsd_V1','22a| df a1asd_V1|5mo','a3as d_V1','aa b_12mo','aasd_V4','aa_6mo_bsd','aa_adn sd_V15',np.nan,'aasd_V12','aasd120Abs'],
     'Date': ['2021-06-13', '2021-06-13','2021-06-13','2021-06-14','2021-06-15','2021-06-15','2021-06-13','2021-06-16','2021-06-13','2021-06-13','2021-06-13','2021-06-16']}
dff = pd.DataFrame(data=d)

你的核心需求是:

  • 将Name列中的_和|替换为空格
  • 将Xmo格式的文本(如5mo、6mo)替换为X months
  • 生成新列NewName

高效实现代码

# 第一步:批量替换_和|为空格,用正则一次匹配两种字符
dff['NewName'] = dff['Name'].str.replace(r'[|_]', ' ', regex=True)

# 第二步:批量替换Xmo为X months,正则捕获数字部分
dff['NewName'] = dff['NewName'].str.replace(r'(\d+)mo', r'\1 months', regex=True)

关键说明

  1. 为什么不用lambda?
    apply(lambda x: ...)是逐行遍历每个字符串,在百万级数据量下,速度会比矢量化的str.replace慢几倍甚至几十倍。Pandas的字符串方法是基于底层优化的批量操作,能一次性处理整列数据,效率提升非常明显。

  2. 正则逻辑解析

    • r'[|_]':匹配|或_任意一个字符,统一替换为空格
    • r'(\d+)mo':捕获一个或多个连续数字(\d+),后面跟着mo,替换为\1 months(\1代表之前捕获到的数字)
  3. NaN值处理
    Pandas的字符串方法会自动忽略NaN值,直接保留为NaN,不需要额外写判断逻辑。

处理后结果示例

col1col3NameDateNewName
1122a| df a1asd_V12021-06-1322a df a1asd V1
44422a| df a1asd_V1|5mo2021-06-1422a df a1asd V1 5 months
6060aa b_12mo2021-06-15aa b 12 months
05aa_6mo_bsd2021-06-16aa 6 months bsd
33NaN2021-06-13NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 02:22:32