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

如何在Python Pandas中拆分字符串中的数字与字母

拆分Pandas DataFrame中混合字符串的数字与字母部分

针对你提供的DataFrame,其中部分单元格包含数字与字母混合的字符串(如"2.3trillion"),可以通过正则表达式结合Pandas的str.extract方法精准拆分数字与字母部分,以下是具体实现:

核心方案:使用str.extract匹配数字与文本

利用正则表达式^(\d*\.?\d*)(.*)$可以精准匹配两类内容:

  • (\d*\.?\d*):匹配整数或小数形式的数字部分(支持空值,对应无数字的情况)
  • (.*):匹配剩余的所有文本部分(支持空值,对应纯数字的情况)

完整代码示例

import pandas as pd

# 初始化你的DataFrame
df = pd.DataFrame({'A': ['2.3trillion', '9', '3.4trillion'],
                   'B': ['8', '1.2trillion', '3trillion'],
                   'C': ['0.1trillion', '12', '2trillion'], 
                   'D': ['42trillion', '52trillion','trillion']})

# 对所有列应用拆分,生成包含数字和文本的新DataFrame
split_result = df.apply(lambda col: col.str.extract(r'^(\d*\.?\d*)(.*)$'))

# 重命名列,明确区分数字与文本部分
split_result.columns = [f"{orig_col}_{suffix}" for orig_col in df.columns for suffix in ['num', 'text']]

# 可选:将数字列转换为数值类型(无数字的行自动转为NaN)
for col in split_result.columns:
    if '_num' in col:
        split_result[col] = pd.to_numeric(split_result[col], errors='coerce')

print(split_result)

输出效果

拆分后的结果会为原DataFrame的每一列生成两个新列:

  • 以_num结尾的列:存储数字部分(已转为数值类型,无数字则为NaN)
  • 以_text结尾的列:存储字母部分(纯数字行则为空字符串)

例如,原D列的trillion行,拆分后D_num为NaN,D_text为trillion;原A列的9行,A_num为9.0,A_text为空字符串。

备选方案:使用str.split分割数字与字母

如果偏好使用分割方法,可以利用正则断言在数字与字母的边界处分割:

split_result = df.apply(lambda col: col.str.split(r'(?<=\d)(?=[a-zA-Z])', expand=True))
split_result.columns = [f"{orig_col}_{suffix}" for orig_col in df.columns for suffix in ['num', 'text']]
# 填充空值,统一处理无数字或纯数字的情况
split_result = split_result.fillna('')

不过这种方法对无数字的字符串(如trillion)会生成空的num列,需要额外填充空值,不如str.extract直接高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 07:09:59