目前我的日期格式为字符串。我能够使用以下内容将字符串转换为日期时间:
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'
答案 0 :(得分:2)
您可以使用normalize
(docs)。
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)