如何从datetime64[ns]格式的df['A']列提取日期?已尝试datetime.strftime
嘿,我来帮你搞定这个问题!你之前用datetime.strftime(df.A, '%y%m%d')没成功,是因为strftime是单个datetime对象的方法,而你的df['A']是Pandas Series,得用.dt访问器来调用Series里每个元素的datetime方法~
解决方案
首先明确你的需求:是要把列转成日期格式的字符串(比如"2002-01-03"),还是保留日期类型(方便后续做日期运算)?两种情况的处理方法如下:
1. 转成YYYY-MM-DD格式的字符串
如果你需要的是和示例完全一致的字符串格式,用Pandas的.dt.strftime()方法:
import pandas as pd # 对Series中的每个datetime元素调用strftime df['A'] = df['A'].dt.strftime('%Y-%m-%d')
⚠️ 注意:你之前用的%y是两位数年份(比如02),而%Y才是四位数年份(比如2002),这也是之前结果不符合预期的原因之一。执行后df['A']会变成字符串类型(object dtype)。
2. 保留日期类型(推荐用于后续日期操作)
如果你之后还要对这列做日期计算(比如加减天数、按日期分组),推荐保留日期类型,有两种常用方式:
方法一:转成Python原生date对象
df['A'] = df['A'].dt.date
执行后df['A']的元素是datetime.date类型,显示时就是2002-01-03这样的格式。
方法二:保留datetime64类型但仅保留日期部分
把时间部分自动设为00:00:00,在DataFrame中显示时通常只展示日期,且能继续使用Pandas的日期函数:
# 方式1:按天取整 df['A'] = df['A'].dt.floor('D') # 方式2:将时间归一化为午夜 df['A'] = df['A'].dt.normalize()
验证结果
执行任意一种方法后,打印df['A']就能得到你想要的结果:
0 2002-01-03 1 2002-01-04 2 2002-01-05 Name: A, dtype: object # 或datetime64[ns],取决于你用的方法
内容的提问来源于stack exchange,提问作者Tie_24
相关产品推荐
相关产品推荐

