python - 在python中将csv对象时间解析为日期时间
问题描述
我有一个 csv 文件,Timestamp
下面有列。我想将格式更改为2013-08-12 10:29:19.673
一秒或一秒的粒度。目前Timestamp
是 type object
。
我可以在 excel 中手动更改其格式,但文件太大,有些行会丢失。
Id Timestamp Data Group_Id
0 19929927 00:07.5 27.0 27
1 19929928 00:08.3 26.5 27
2 19929929 00:48.7 33.5 157
3 19929930 00:50.0 33.0 157
4 19929931 00:53.1 35.0 25
...
1048570 20978497 10:11.9 34.5 152
1048571 20978498 10:13.3 34.0 152
1048572 20978499 10:41.2 42.0 138
1048573 20978500 10:42.5 45.0 138
1048574 20978501 10:43.9 44.0 138
解决方案
编辑:如果将时间转换为没有日期信息的日期时间,熊猫显然会添加实际日期。
如果需要再过几天,请检查此解决方案:
如果时间以以下方式开始,想法是创建连续的日期时间0
:
df = df[['Timestamp']]
print (df)
Timestamp
0 00:08.3 <- first day
1 00:48.7
2 00:50.0
3 00:53.1
4 10:11.9
5 10:13.3
6 10:41.2
7 00:50.0 <- second day
8 00:53.1
9 10:42.5
10 10:43.9
11 00:07.5 <- third day
12 00:08.3
13 10:11.9
14 10:13.3
15 10:43.9
#convert to datetimes and get hours for test 0
df['h'] = pd.to_datetime(df['Timestamp']).dt.hour
#test first 0 for start of day
df['mask'] = df['h'].shift().ne(0) & df['h'].eq(0)
#create consecutive groups - starts by 1 if first time start by 0, else start by 1
df['g'] = df['mask'].cumsum()
#specify first day in origin parameter
df['days'] = pd.to_datetime(df['g'], origin='2016-01-01', unit='d')
#add to original Timestamps if HH:MM.SS
df['Timestamp1'] = df['days'] + pd.to_timedelta(df['Timestamp'].str.replace('\.',':'))
#add to original Timestamps if format without hours - MM:SS.SS
df['Timestamp2'] = df['days'] + pd.to_timedelta('00:' + df['Timestamp'])
print (df)
Timestamp h mask g days Timestamp1 \
0 00:08.3 0 True 1 2016-01-02 2016-01-02 00:08:03
1 00:48.7 0 False 1 2016-01-02 2016-01-02 00:48:07
2 00:50.0 0 False 1 2016-01-02 2016-01-02 00:50:00
3 00:53.1 0 False 1 2016-01-02 2016-01-02 00:53:01
4 10:11.9 10 False 1 2016-01-02 2016-01-02 10:11:09
5 10:13.3 10 False 1 2016-01-02 2016-01-02 10:13:03
6 10:41.2 10 False 1 2016-01-02 2016-01-02 10:41:02
7 00:50.0 0 True 2 2016-01-03 2016-01-03 00:50:00
8 00:53.1 0 False 2 2016-01-03 2016-01-03 00:53:01
9 10:42.5 10 False 2 2016-01-03 2016-01-03 10:42:05
10 10:43.9 10 False 2 2016-01-03 2016-01-03 10:43:09
11 00:07.5 0 True 3 2016-01-04 2016-01-04 00:07:05
12 00:08.3 0 False 3 2016-01-04 2016-01-04 00:08:03
13 10:11.9 10 False 3 2016-01-04 2016-01-04 10:11:09
14 10:13.3 10 False 3 2016-01-04 2016-01-04 10:13:03
15 10:43.9 10 False 3 2016-01-04 2016-01-04 10:43:09
Timestamp2
0 2016-01-02 00:00:08.300
1 2016-01-02 00:00:48.700
2 2016-01-02 00:00:50.000
3 2016-01-02 00:00:53.100
4 2016-01-02 00:10:11.900
5 2016-01-02 00:10:13.300
6 2016-01-02 00:10:41.200
7 2016-01-03 00:00:50.000
8 2016-01-03 00:00:53.100
9 2016-01-03 00:10:42.500
10 2016-01-03 00:10:43.900
11 2016-01-04 00:00:07.500
12 2016-01-04 00:00:08.300
13 2016-01-04 00:10:11.900
14 2016-01-04 00:10:13.300
15 2016-01-04 00:10:43.900
推荐阅读
- vtk - 将 VtkVolume 保存为 stl 文件(3d 数据)?
- javascript - 从 React 类导出函数
- javascript - 如何将本地 javascript 添加到 vue 组件?
- c# - BackgroundWorker 在方法正在执行时显示进度
- java - 无法使用 ProjectExecutionServices 创建 TaskExecuter 类型的服务
- python - 将 xmltodict 模块导入 Visual Studio 代码
- linux - 系统负载是多少
- javascript - 如何仅在每个输入的数字后添加逗号
- javascript - 如何将半字节字符转换为全字节字符日语
- csv - NiFi:加入两个csv文件进行查找,然后根据查找文件从流文件(csv fle)中选择列