从字符串转换为日期时间时获取常规日期时间格式而不是纪元时间?
Posted
技术标签:
【中文标题】从字符串转换为日期时间时获取常规日期时间格式而不是纪元时间?【英文标题】:Getting regular datetime format instead of epoch time when converting from string to datetime? 【发布时间】:2021-06-10 01:23:43 【问题描述】:我在具有以下格式的列中有字符串类型的日期:August 14, 2020
。我想将它转换为具有通常日期时间格式的日期时间对象,但使用下面的代码给了我纪元时间:
df.loc[mask, 'date_added'] = df.loc[mask,'date_added'].apply(lambda x : pd.to_datetime(x))
我知道您可以使用.fromtimestamp()
,但.to_datetime()
中是否有一个选项来获取日期时间对象和格式?我认为使用.fromtimestamp()
也很难合并到一个 lambda 函数中。我还尝试将 .to_period()
添加到 lambda 函数中,这导致格式正确,但在使用 seaborn 绘图时会导致问题。
在将字符串转换为日期时间时,有没有办法将其转换为常规的日期时间格式?
示例数据:
show_id date_added
0 s1 August 14, 2020
1 s2 December 23, 2016
2 s3 December 20, 2018
3 s4 November 16, 2017
df 代码示例数据:
pd.DataFrame(([(0, 's1', 'August 14, 2020'), (1, 's2', 'December 23, 2016'),
(2, 's3', 'December 20, 2018'), (3, 's4', 'November 16, 2017')]), columns=['index', 'id', 'date_added'])
【问题讨论】:
您可以将系列传递给pd.to_datetime
。也就是说,如果您仅使用.loc[mask,]
更新列的一部分,则该列仍然具有对象 dtype。
pd.to_datetime 似乎没有“inplace = True”选项。有没有办法不戴口罩?
什么是mask
?顺便说一句,熊猫很聪明,你可以pd.to_datetime(df['date_added'])
。
此外,datetime dtype 没有 format,就像字符串中的 datetime 一样。另外,“纪元格式”是什么意思?
@Quang Hoang 掩码是一个带有 Panda 布尔运算符的过滤器,在这种情况下为 not_null = df['date_added'].isnull() == False
。它用于使用 .loc 更改原始 df 的某些部分。并且pd.to_datetime(df['date_added'])
似乎有效,但是当我在使用它转换列后提取年份时,它给了我一个十进制年份,这会进一步产生问题。你知道这是为什么吗?
【参考方案1】:
是的,你可以df['date_added']=df['date_added'].astype('datetime')
【讨论】:
在上面的代码(lambda函数)之后会是单独的一行吗? 它完全不需要该行,它只是将整列解析为日期时间。以上是关于从字符串转换为日期时间时获取常规日期时间格式而不是纪元时间?的主要内容,如果未能解决你的问题,请参考以下文章