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

如何用Pandas将无分隔符的DataFrame列拆分为整数列和字符串列?

解决Pandas DataFrame无分隔符列拆分问题

这个问题确实有点棘手,不过用正则表达式就能轻松搞定!我们可以通过提取字符串中的数字序列和非数字序列,来拆分出你需要的integer和string列。下面是具体的实现步骤:

1. 构造示例DataFrame

先还原你提供的数据集,方便后续测试:

import pandas as pd

data = {
    'A': ['3', '629S', '84S', 'S72'],
    'B': ['abc', 'def', 'ghi', 'jkl']
}
df = pd.DataFrame(data)

2. 用正则提取数字与非数字部分

使用str.extract配合正则表达式,一次性提取出所有数字组成的部分和非数字组成的部分:

# 正则 (\d*) 匹配零个或多个数字,(\D*) 匹配零个或多个非数字
df[['integer', 'string']] = df['A'].str.extract(r'(\d*)(\D*)')

3. 处理数据类型与缺失值

因为纯数字的行中,非数字部分会是空字符串;纯非数字的行中,数字部分也会是空字符串,我们需要把这些空值转为NaN,并将数字列转为支持缺失值的整数类型:

# 将数字列的空字符串转为pd.NA,再转为Int64类型(支持NaN的整数类型)
df['integer'] = df['integer'].replace('', pd.NA).astype('Int64')

# 将字符串列的空字符串转为pd.NA
df['string'] = df['string'].replace('', pd.NA)

4. 调整列顺序(可选)

如果需要把拆分后的列放到前面,可以调整列顺序:

df = df[['integer', 'string', 'B']]

最终输出结果

运行完上述代码后,你会得到预期的DataFrame:

integer string    B
0        3    NaN  abc
1      629      S  def
2       84      S  ghi
3       72      S  jkl

补充说明

  • 这个方法适用于单个数字段+单个非数字段的场景(比如你的示例数据),如果遇到多个数字段的情况(例如"12S34"),可以用str.findall(r'\d+')提取所有数字后再合并,比如df['integer'] = df['A'].str.findall(r'\d+').str.join('').replace('', pd.NA).astype('Int64')。
  • 使用Int64类型而非普通int,是因为普通整数列无法存储NaN值,而Int64是Pandas提供的可空整数类型,完美适配这种有缺失值的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 11:43:13