熊猫日期时间格式

时间:2016-08-04 18:27:01

标签: python datetime pandas

目前我的日期格式为字符串。我能够使用以下内容将字符串转换为日期时间:

df['submitted_on'] = df['submitted_on'].apply(lambda x: dt.datetime.strptime(x, '%Y-%m-%d %H:%M:%S.%f'))

我想删除时间戳,但我很难这样做。我的首选格式为%Y%m%d。所以我偶然发现THIS页面并添加了.date()。结果如下:

df['submitted_on'] = df['submitted_on'].apply(lambda x: dt.datetime.strptime(x, '%Y%m%d').date())

我收到此值错误,我再次迷失了如何删除时间戳。非常感谢任何帮助。

  

ValueError:时间数据' 2015-02-26 16:45:36.0'不符合格式'%Y%m%d'

3 个答案:

答案 0 :(得分:2)

您可以使用normalizedocs)。

dti = pd.DatetimeIndex(start='today', periods=4, freq='D')
dti

输出

DatetimeIndex(['2016-08-04 14:30:34.447589', '2016-08-05 14:30:34.447589',
               '2016-08-06 14:30:34.447589', '2016-08-07 14:30:34.447589'],
              dtype='datetime64[ns]', freq='D')

dti.normalize()

输出

DatetimeIndex(['2016-08-04', '2016-08-05', '2016-08-06', '2016-08-07'], dtype='datetime64[ns]', freq='D')

如果它是一系列时间戳,您可以使用地图转换它们。

编辑:@ piRSquared的方式在这种情况下更好。

pd.to_datetime(dti).map(lambda dt: dt.date())

输出

array([datetime.date(2016, 8, 4), datetime.date(2016, 8, 5),
       datetime.date(2016, 8, 6), datetime.date(2016, 8, 7)], dtype=object)

答案 1 :(得分:2)

您可以将Timestamp对象转换为datetime.datetime对象并提取datetime.date部分,如下所示:

In [7]: import pandas as pd

In [8]: print(pd.Timestamp('2015-02-26 16:45:36.0').to_datetime().date())
2015-02-26
<class 'datetime.date'>

您想要的格式:

In [11]: print(pd.Timestamp('2015-02-26 16:45:36.0').to_datetime().date().strftime("%Y%m%d"))
20150226
<class 'str'>

答案 2 :(得分:1)

s = pd.Series(['2010-01-01 10:00', '2010-06-01 11:00'])

pd.to_datetime(pd.to_datetime(s).dt.date)