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

Python中从DataFrame的Edition列提取月份与年份的方法咨询

解决DataFrame中Edition列的月份和年份提取问题

没问题,我来帮你搞定这个日期提取的问题!你之前直接用固定索引取元素出错,核心原因就是Edition列的字符串结构不一致——有的前面多了额外字段(比如第二个例子里的Import,),导致按固定索引str[3]取内容时,遇到更长的字符串就会拿到错误的值。

这里有两种可靠的方法可以提取月份和年份,生成对应的两列:

方法1:利用字符串分割取末尾元素

观察你的示例数据可以发现,不管前面的内容有多少,月份和年份始终是字符串的最后两个部分。所以我们可以先按空格分割字符串,然后直接取倒数第二个(月份)和倒数第一个(年份)元素:

# 提取月份
train_df['Edition_Month'] = train_df['Edition'].str.split().str[-2]
# 提取年份
train_df['Edition_Year'] = train_df['Edition'].str.split().str[-1]

测试你的示例:

  • 对于'Paperback,– 10 Mar 2016',分割后取[-2]得到'Mar',[-1]得到'2016'
  • 对于'Hardcover,– Import, 1 Mar 2018',分割后取[-2]得到'Mar',[-1]得到'2018'

完全符合预期!

方法2:使用正则表达式提取(更健壮)

如果你的数据后续可能出现其他格式的字符串,正则表达式会是更稳妥的选择。我们可以匹配字符串末尾的「三位字母月份 + 四位数字年份」模式:

# 提取月份和年份,直接生成两列
train_df[['Edition_Month', 'Edition_Year']] = train_df['Edition'].str.extract(r'(\w{3}) (\d{4})$')

正则表达式解释:

  • (\w{3}):匹配连续3个字母(对应月份缩写,比如Mar)
  • (\d{4}):匹配连续4个数字(对应年份,比如2016)
  • $:锚定到字符串末尾,确保我们提取的是最后部分的日期信息

这种方法即使字符串前面的字段数量变化,只要日期部分在末尾且格式统一,就能准确提取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:05:55