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
相关产品推荐
相关产品推荐

