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

Pandas字符串处理:批量转换DataFrame字符串格式求助

优雅处理DataFrame中字符串的格式转换问题

刚接触Python处理DataFrame字符串确实容易懵,我给你一个不用额外创建中间列的高效方案,完美适配你这种批量字符串转换的需求!

你的需求是把A列里size_fruit的格式,转换成fruit(size)的形式对吧?直接用pandas的字符串拆分+链式操作就能搞定,不用折腾多列或者一堆替换操作:

核心代码示例

import pandas as pd

# 先还原你的示例数据
df = pd.DataFrame({
    'A': ['big_apples', 'big_oranges', 'small_pears', 'medium_grapes'],
    'B': [1, 2, 3, None]
})

# 一步完成格式转换,直接覆盖原列
df['A'] = df['A'].str.split('_', n=1).apply(lambda x: f"{x[1]}({x[0]})")

# 输出结果
print(df)

运行后就能得到你想要的格式:

A    B
0   apples(big)  1.0
1  oranges(big)  2.0
2   pears(small) 3.0
3 grapes(medium) NaN

代码解释

  • str.split('_', n=1):按下划线只拆分一次,把每个字符串拆成[size, fruit]的列表(n=1保证即使后面有更多下划线也不会拆分多余部分);
  • apply(lambda x: ...):对每一组拆分后的列表做格式化,直接拼成fruit(size)的形式;
  • 整个操作是矢量化的,处理大量字符串比循环或者手动操作快得多,而且不用创建额外的中间列,代码简洁干净。

额外优化:处理异常值

如果你的数据里有可能没有下划线的异常单元格,可以加个判断避免报错:

df['A'] = df['A'].str.split('_', n=1).apply(
    lambda x: f"{x[1]}({x[0]})" if len(x) == 2 else x[0]
)

这样遇到不符合格式的单元格会保持原样,不会抛出错误。

比起你之前考虑的startswith()、多次replace()或者拆分多列的方法,这个方案一步到位,既高效又易维护,非常适合批量处理字符串场景!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:51:48