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

标签: python pandas string datetime epoch


【解决方案1】:

是的,你可以df['date_added']=df['date_added'].astype('datetime')

【讨论】:

  • 在上面的代码(lambda函数)之后会是单独的一行吗?
  • 它完全不需要该行,它只是将整列解析为日期时间。
猜你喜欢
  • 2019-11-14
  • 2018-08-07
  • 2012-04-03
  • 2018-02-18
  • 2018-09-21
  • 2012-09-06
  • 2015-01-23
  • 1970-01-01
  • 2012-11-22
相关资源
最近更新 更多