【发布时间】: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'])似乎有效,但是当我在使用它转换列后提取年份时,它给了我一个十进制年份,这会进一步产生问题。你知道这是为什么吗?
标签: python pandas string datetime epoch