如何从DataFrame的字符串日期中提取年月并生成指定新列?
解决DataFrame日期提取月份和年份的问题
晚上好!我来帮你搞定这个日期处理的问题~你提到用strptime()没效果,大概率是因为没有先把字符串类型的日期列转换成pandas的datetime对象,单独用Python标准库的strptime()处理DataFrame列会比较麻烦,而且效率不高。下面给你两种简单高效的实现方法:
方法一:提取数字格式的月份和年份
这种方法会直接生成整数类型的月份(1-12)和年份(4位数字),适合后续的统计分析:
import pandas as pd # 假设你的DataFrame名为df,先将日期列转换为datetime类型 df['order date'] = pd.to_datetime(df['order date'], format='%m-%d-%Y') df['dispatch date'] = pd.to_datetime(df['dispatch date'], format='%m-%d-%Y') # 生成订单相关的月份和年份列 df['Order_Mt'] = df['order date'].dt.month df['Order_yr'] = df['order date'].dt.year # 生成发货相关的月份和年份列 df['Dispatch_Mt'] = df['dispatch date'].dt.month df['Dispatch_Yr'] = df['dispatch date'].dt.year
方法二:提取字符串格式的月份和年份
如果你需要的是月份缩写(比如Feb)、月份全称(比如February)或者两位年份(比如13),可以用dt.strftime()来格式化:
# 提取月份缩写(如Feb)和两位年份(如13) df['Order_Mt'] = df['order date'].dt.strftime('%b') df['Order_yr'] = df['order date'].dt.strftime('%y') # 提取月份全称(如February)和四位年份(如2013) df['Dispatch_Mt'] = df['dispatch date'].dt.strftime('%B') df['Dispatch_Yr'] = df['dispatch date'].dt.strftime('%Y')
关键说明
pd.to_datetime()里的format='%m-%d-%Y'是关键,它明确告诉pandas你的日期格式是月-日-年,避免自动解析出错;- pandas的
dt访问器专门用来处理datetime类型的列,能快速提取日期的各个部分,比循环用strptime()高效得多。
内容的提问来源于stack exchange,提问作者Veera Venkata Durga Jagadeesh
相关产品推荐
相关产品推荐

