含时区信息的DataFrame日期字段如何获取对应星期名称
带时区日期字段获取星期名称的方法
问题原因
.day_name()是pandas针对自身标准datetime64[ns, tz]时区日期类型设计的向量化方法,如果你的DataFrame日期列存的是原生Python带tzoffset自定义时区的datetime对象、列类型为object,直接调用该方法会因为类型不兼容失效。
可直接复用的解决方案
方案1:类型转换后调用原生方法(推荐,适合大数据量,性能最优)
先把日期列统一转换为pandas可识别的标准带时区日期类型,再直接调用.day_name()即可:import pandas as pd # 假设日期列名为date,转换时自动识别原时区信息,不会丢失时区偏移 df['date'] = pd.to_datetime(df['date']) # 获取星期名称,默认返回英文全称 df['weekday'] = df['date'].dt.day_name() # 需要中文星期名可指定locale参数: # df['weekday_cn'] = df['date'].dt.day_name(locale='zh_CN.UTF-8')用你给出的样例日期测试,返回结果为
Tuesday,和实际日期(2021年3月23日为周二)完全匹配。方案2:逐行调用Python原生日期方法(适合小数据量临时处理)
如果不想做类型转换,可以用apply逐行调用Python datetime自带的strftime方法提取星期名:# %A返回完整星期名称,%a返回星期缩写 df['weekday'] = df['date'].apply(lambda x: x.strftime('%A'))
注意事项
不要直接在未做类型转换的object类型日期列上调用.dt访问器的相关方法,这类列存储的是Python原生对象,pandas对自定义时区属性的兼容性很差,很容易触发类型报错或返回错误结果。
内容的提问来源于stack exchange,提问作者Moody
相关产品推荐
相关产品推荐

