B.Q*_*ink 2 python datetime dataframe pandas
我的数据存储方式的示例 df:
df = pd.DataFrame({'DOB': {0: '2003-01-01 00:00:00+00', 1: '2003-01-02 00:00:00+00'}})
Run Code Online (Sandbox Code Playgroud)
我想将列转换为日期时间,并只保留年-月-日值。基本上,就像这个问题一样:
和这个:
将 Pandas DataFrame 中的日期对象列转换为字符串
除了使用这些答案之外,从已经是日期时间格式的列中提取日期会将该列转换为对象格式。评论中也讨论了这一点,但似乎已转移到不再可用的聊天中。
第一个答案的结果:
[in] pd.to_datetime(df['DOB']).dt.date
[out]
0 2003-01-01
1 2003-01-02
Name: DOB, dtype: object
Run Code Online (Sandbox Code Playgroud)
第二个答案的结果:
[in] pd.to_datetime(df['DOB']).dt.strftime('%Y-%m-%d')
[out]
0 2003-01-01
1 2003-01-02
Name: DOB, dtype: object
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它不再是日期时间格式,而是一个对象。然后我就不能在我的脚本中进一步使用它了。
使用format = "%Y-%m-%dpd.to_datetime 选项也不起作用,因为时间戳仍然存在:
[in] pd.to_datetime(df['DOB'], format = "%Y-%m-%d")
[out]
0 2003-01-01 00:00:00+00:00
1 2003-01-02 00:00:00+00:00
Name: DOB, dtype: datetime64[ns, UTC]
Run Code Online (Sandbox Code Playgroud)
确保列保持日期时间格式,同时仅保留日期格式的简单解决方案是什么?
IMO 这里没有问题:
s = pd.to_datetime(pd.Series(['2021-02-01 00:00:00']))
s
# 0 2021-02-01
# dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)
事实上,显示的类型是“object”:
s.dt.date
# 0 2021-02-01
# dtype: object
Run Code Online (Sandbox Code Playgroud)
但这没有多大意义,类型实际上是datetime.date:
type(s.dt.date[0])
# datetime.date
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1366 次 |
| 最近记录: |