Python 3.x python 3将字符串时间转换为yyyy mm dd
假设我在一个名为df的数据帧中有以下时间戳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
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
非常感谢。两种解决方案都非常有效!学到了很多!非常感谢。两种解决方案都非常有效!学到了很多!非常感谢。两种解决方案都非常有效!学到了很多!非常感谢。两种解决方案都非常有效!学到了很多!