如何在Pandas中按最后一个整数拆分列?求通用实现方案
Pandas按最后一个整数位置拆分列的通用方案
需求场景
需要将Pandas中的一列(示例值如01.01.2000John Doe、01.01.2002Jane Doe)拆分为两列:
- 第一列存储日期部分(如
01.01.2000) - 第二列存储后续的字符串(如
John Doe)
要求不依赖固定字符索引截取,实现通用的拆分逻辑——按最后一个整数的位置拆分前后两部分。
原实现的局限性
原代码通过固定索引str[0:19]和str[19:]截取,仅适用于特定长度的日期格式,一旦日期格式长度变化(如短日期、不同分隔符的日期)就会失效。
通用解决方案
利用正则表达式的str.extract方法,匹配到最后一个数字的位置完成拆分,代码如下:
import pandas as pd # 构建示例数据 df_t = pd.DataFrame({'date_time': ['01.01.2000John Doe', '01.01.2002Jane Doe']}) # 正则拆分:捕获最后一个数字前的所有内容(日期),以及剩余部分(名称) df_t[['date', 'name']] = df_t['date_time'].str.extract(r'^(.*\d)(.*)$') # 删除原列 tid = df_t.drop(["date_time"], axis=1) # 输出结果 print(tid)
正则说明
^(.*\d):从字符串开头匹配,直到捕获到最后一个数字(包含该数字),对应日期部分(.*):捕获最后一个数字之后的所有字符,对应名称部分
该正则适配多种日期格式(如2024-10-5Bob、12/31/2023Alice Smith等),只要日期部分以数字结尾,就能正确拆分。
如果你的日期格式是固定的dd.mm.yyyy,也可以用更精准的正则提升匹配效率:
df_t[['date', 'name']] = df_t['date_time'].str.extract(r'^(\d{2}\.\d{2}\.\d{4})(.*)$')
内容的提问来源于stack exchange,提问作者sebi_king
相关产品推荐
相关产品推荐

