【问题标题】:Convert Timestamp to Date only仅将时间戳转换为日期
【发布时间】:2019-07-07 13:00:19
【问题描述】:

我一直在查看我能找到的每一个线程,唯一与这种类型的格式问题相关的是这里,但它是针对 java...

How parse 2013-03-13T20:59:31+0000 date string to Date

我有一列包含 201604 和 201605 等值,我需要将其转换为日期值,例如 2016-04-01 和 2016-05-01。为了做到这一点,我做了下面的事情。

#Create Number to build full date
df['DAY_NBR'] = '01'

#Convert Max and Min date to string to do date transformation
df['MAXDT'] = df['MAXDT'].astype(str)
df['MINDT'] = df['MINDT'].astype(str)

#Add the day number to the max date month and year
df['MAXDT'] = df['MAXDT'] + df['DAY_NBR']

#Add the day number to the min date month and year
df['MINDT'] = df['MINDT'] + df['DAY_NBR']

#Convert Max and Min date to integer values
df['MAXDT'] = df['MAXDT'].astype(int)
df['MINDT'] = df['MINDT'].astype(int)

#Convert Max date to datetime
df['MAXDT'] = pd.to_datetime(df['MAXDT'], format='%Y%m%d')

#Convert Min date to datetime
df['MINDT'] = pd.to_datetime(df['MINDT'], format='%Y%m%d') 

老实说,我可以处理这个输出,但它有点乱,因为两列的唯一值是......

MAXDT Values
['2016-07-01T00:00:00.000000000' '2017-09-01T00:00:00.000000000'
 '2018-06-01T00:00:00.000000000' '2017-07-01T00:00:00.000000000'
 '2017-03-01T00:00:00.000000000' '2018-12-01T00:00:00.000000000'
 '2017-12-01T00:00:00.000000000' '2019-01-01T00:00:00.000000000'
 '2018-09-01T00:00:00.000000000' '2018-10-01T00:00:00.000000000'
 '2016-04-01T00:00:00.000000000' '2018-03-01T00:00:00.000000000'
 '2017-05-01T00:00:00.000000000' '2018-08-01T00:00:00.000000000'
 '2017-02-01T00:00:00.000000000' '2016-12-01T00:00:00.000000000'
 '2018-01-01T00:00:00.000000000' '2018-02-01T00:00:00.000000000'
 '2017-06-01T00:00:00.000000000' '2018-11-01T00:00:00.000000000'
 '2018-05-01T00:00:00.000000000' '2019-11-01T00:00:00.000000000'
 '2016-06-01T00:00:00.000000000' '2017-10-01T00:00:00.000000000'
 '2016-08-01T00:00:00.000000000' '2018-04-01T00:00:00.000000000'
 '2016-03-01T00:00:00.000000000' '2016-10-01T00:00:00.000000000'
 '2016-11-01T00:00:00.000000000' '2019-12-01T00:00:00.000000000'
 '2016-09-01T00:00:00.000000000' '2017-08-01T00:00:00.000000000'
 '2016-05-01T00:00:00.000000000' '2017-01-01T00:00:00.000000000'
 '2017-11-01T00:00:00.000000000' '2018-07-01T00:00:00.000000000'
 '2017-04-01T00:00:00.000000000' '2016-01-01T00:00:00.000000000'
 '2016-02-01T00:00:00.000000000' '2019-02-01T00:00:00.000000000'
 '2019-07-01T00:00:00.000000000' '2019-10-01T00:00:00.000000000'
 '2019-09-01T00:00:00.000000000' '2019-03-01T00:00:00.000000000'
 '2019-05-01T00:00:00.000000000' '2019-04-01T00:00:00.000000000'
 '2019-08-01T00:00:00.000000000' '2019-06-01T00:00:00.000000000'
 '2020-02-01T00:00:00.000000000' '2020-01-01T00:00:00.000000000']
MINDT Values
['2016-04-01T00:00:00.000000000' '2017-07-01T00:00:00.000000000'
 '2016-02-01T00:00:00.000000000' '2017-01-01T00:00:00.000000000'
 '2017-02-01T00:00:00.000000000' '2018-12-01T00:00:00.000000000'
 '2017-08-01T00:00:00.000000000' '2018-04-01T00:00:00.000000000'
 '2017-10-01T00:00:00.000000000' '2019-01-01T00:00:00.000000000'
 '2018-05-01T00:00:00.000000000' '2018-09-01T00:00:00.000000000'
 '2018-10-01T00:00:00.000000000' '2016-01-01T00:00:00.000000000'
 '2016-03-01T00:00:00.000000000' '2017-11-01T00:00:00.000000000'
 '2017-05-01T00:00:00.000000000' '2018-07-01T00:00:00.000000000'
 '2018-06-01T00:00:00.000000000' '2017-12-01T00:00:00.000000000'
 '2016-10-01T00:00:00.000000000' '2018-02-01T00:00:00.000000000'
 '2017-06-01T00:00:00.000000000' '2018-08-01T00:00:00.000000000'
 '2018-03-01T00:00:00.000000000' '2018-11-01T00:00:00.000000000'
 '2016-08-01T00:00:00.000000000' '2016-06-01T00:00:00.000000000'
 '2018-01-01T00:00:00.000000000' '2016-07-01T00:00:00.000000000'
 '2016-11-01T00:00:00.000000000' '2016-09-01T00:00:00.000000000'
 '2017-04-01T00:00:00.000000000' '2016-05-01T00:00:00.000000000'
 '2017-09-01T00:00:00.000000000' '2016-12-01T00:00:00.000000000'
 '2017-03-01T00:00:00.000000000']

我正在尝试构建一个贯穿这些日期的循环,并且它可以工作,但我不想在索引中包含所有这些不相关的零和一个 T。如何将这些空时间戳值转换为 yyyy-mm-dd 格式的日期?

谢谢!

【问题讨论】:

    标签: python date time timestamp


    【解决方案1】:

    不幸的是,我相信 Pandas 总是将 datetime 对象存储为datetime64[ns],这意味着精度必须是这样的。即使您尝试另存为datetime64[D],它也会被转换为datetime64[ns]

    可以将这些日期时间对象存储为字符串,但最简单的解决方案可能是在您循环遍历它们时去掉多余的零(即,使用df['MAXDT'].to_numpy().astype('datetime64[D]') 并循环遍历格式化的 numpy 数组),或者只是使用日期时间重新格式化。

    【讨论】:

      猜你喜欢
      • 2016-11-26
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 2017-04-25
      • 2022-01-08
      相关资源
      最近更新 更多