Python 3.x python 3将字符串时间转换为yyyy mm dd

Python 3.x python 3将字符串时间转换为yyyy mm dd,python-3.x,pandas,datetime,Python 3.x,Pandas,Datetime,假设我在一个名为df的数据帧中有以下时间戳 time 1 2019-05-03 15:26:37.000 2 2019-05-10 19:26:29.000 3 2019-05-10 23:39:07.000 4 2019-05-08 13:52:08.000 我计划把它转换成 time 1 2019-05-03 2 2019-05-10 3

假设我在一个名为df的数据帧中有以下时间戳

           time
1          2019-05-03 15:26:37.000
2          2019-05-10 19:26:29.000
3          2019-05-10 23:39:07.000
4          2019-05-08 13:52:08.000
我计划把它转换成

           time
1          2019-05-03
2          2019-05-10
3          2019-05-10
4          2019-05-08
这样我就可以分组计算每天有多少个日期点

df2=pd.to_datetime(df['time'], format='%d-%b-%y')
返回以下错误

ValueError: time data '2019-05-04 14:08:33.000' does not match format '%d-%b-%y' (match)

TypeError: Unrecognized value type: <class 'str'>

During handling of the above exception, another exception occurred:
返回

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
pandas/_libs/tslib.pyx in pandas._libs.tslib.array_with_unit_to_datetime()

ValueError: could not convert string to float: '2019-05-04 14:08:33.000'
如果我这样做

df2=pd.to_datetime(df['time'], format='%d-%b-%y', errors='ignore')
返回相同的

           time
1          2019-05-03 15:26:37.000
2          2019-05-10 19:26:29.000
3          2019-05-10 23:39:07.000
4          2019-05-08 13:52:08.000
有什么想法吗?谢谢大家!

IIUC,您可以使用:

pd.to_datetime(df['time']).dt.normalize() # if series is a object dtype
或:


IIUC,你可以使用:

pd.to_datetime(df['time']).dt.normalize() # if series is a object dtype
或:



其他可能的解决办法:

df = pd.DataFrame({'time':['2019-05-03 15:26:37.000', '2019-05-10 19:26:29.000', '2019-05-10 23:39:07.000', '2019-05-08 13:52:08.000']})

df['time'] = pd.to_datetime(df['time']).dt.strftime('%Y-%m-%d')

print(df)
印刷品:

         time
0  2019-05-03
1  2019-05-10
2  2019-05-10
3  2019-05-08
time
2019-05-03    1
2019-05-04    0
2019-05-05    0
2019-05-06    0
2019-05-07    0
2019-05-08    1
2019-05-09    0
2019-05-10    2
Freq: D, Name: data, dtype: int64
注意:如果您想按天分组,您不需要预先格式化天,只需将其转换为datetime并查看(频率设置为
'D'

例如:

df = pd.DataFrame({'time':['2019-05-03 15:26:37.000', '2019-05-10 19:26:29.000', '2019-05-10 23:39:07.000', '2019-05-08 13:52:08.000'],
                   'data':[1, 1, 1, 1]})

df['time'] = pd.to_datetime(df['time'])

print(df.groupby(pd.Grouper(key='time', freq='D'))['data'].sum())
印刷品:

         time
0  2019-05-03
1  2019-05-10
2  2019-05-10
3  2019-05-08
time
2019-05-03    1
2019-05-04    0
2019-05-05    0
2019-05-06    0
2019-05-07    0
2019-05-08    1
2019-05-09    0
2019-05-10    2
Freq: D, Name: data, dtype: int64

其他可能的解决办法:

df = pd.DataFrame({'time':['2019-05-03 15:26:37.000', '2019-05-10 19:26:29.000', '2019-05-10 23:39:07.000', '2019-05-08 13:52:08.000']})

df['time'] = pd.to_datetime(df['time']).dt.strftime('%Y-%m-%d')

print(df)
印刷品:

         time
0  2019-05-03
1  2019-05-10
2  2019-05-10
3  2019-05-08
time
2019-05-03    1
2019-05-04    0
2019-05-05    0
2019-05-06    0
2019-05-07    0
2019-05-08    1
2019-05-09    0
2019-05-10    2
Freq: D, Name: data, dtype: int64
注意:如果您想按天分组,您不需要预先格式化天,只需将其转换为datetime并查看(频率设置为
'D'

例如:

df = pd.DataFrame({'time':['2019-05-03 15:26:37.000', '2019-05-10 19:26:29.000', '2019-05-10 23:39:07.000', '2019-05-08 13:52:08.000'],
                   'data':[1, 1, 1, 1]})

df['time'] = pd.to_datetime(df['time'])

print(df.groupby(pd.Grouper(key='time', freq='D'))['data'].sum())
印刷品:

         time
0  2019-05-03
1  2019-05-10
2  2019-05-10
3  2019-05-08
time
2019-05-03    1
2019-05-04    0
2019-05-05    0
2019-05-06    0
2019-05-07    0
2019-05-08    1
2019-05-09    0
2019-05-10    2
Freq: D, Name: data, dtype: int64

非常感谢。两种解决方案都非常有效!学到了很多!非常感谢。两种解决方案都非常有效!学到了很多!非常感谢。两种解决方案都非常有效!学到了很多!非常感谢。两种解决方案都非常有效!学到了很多!