Python 在datetime索引中,如何将所有日期更改为特定日期。或起源
我有一个来自日志文件的CVS数据:Python 在datetime索引中,如何将所有日期更改为特定日期。或起源,python,pandas,Python,Pandas,我有一个来自日志文件的CVS数据: UTC_TIME,FOCUS,IRIS,ZOOM,PAN,TILT,ROLL,LONGITUDE,LATITUDE,ALTITUDE,RED_RECORD 23:2:24.1, 10.9, 32.0, 180.0, 16.7, -29.5, -0.0, 151.206135, -33.729484, 1614.3, 0 23:2:24.2, 10.9, 32.0, 180.0, 16.7, -29.5, -0.0, 151.206135, -33.729484
UTC_TIME,FOCUS,IRIS,ZOOM,PAN,TILT,ROLL,LONGITUDE,LATITUDE,ALTITUDE,RED_RECORD
23:2:24.1, 10.9, 32.0, 180.0, 16.7, -29.5, -0.0, 151.206135, -33.729484, 1614.3, 0
23:2:24.2, 10.9, 32.0, 180.0, 16.7, -29.5, -0.0, 151.206135, -33.729484, 1614.3, 0
23:2:24.3, 10.9, 32.0, 180.0, 16.7, -29.5, -0.0, 151.206135, -33.729484, 1614.3, 0
这是我目前的代码:
vfx_df = pd.read_csv(data, header=0, low_memory=False)
我必须把“纳秒”分开,因为它们是fps而不是纳秒
vfx_df['UTC_TIME'] = vfx_df['UTC_TIME'].str.split('.', n = 1, expand=True)
vfx_df['UTC_TIME'] = pd.to_datetime(vfx_df['UTC_TIME'], format='%H:%M:%S')
vfx_df.set_index('UTC_TIME', inplace=True, drop=True)
vfx_df = vfx_df.tz_localize('UTC')
vfx_df = vfx_df.tz_convert('Australia/Sydney')
我留下这些结果:1900-01-02 09:32:20+10:05
如何将年、日、月更改为实际拍摄的日期。
还可以考虑拍摄的过程可以超过6小时,所以日志中的UTC时间戳可以在本地时间第二天到达?
我已尝试在导入时设置原点,并且:
vfx_df['UTC_TIME'] = pd.to_datetime(vfx_df['UTC_TIME'], format='%H:%M:%S' unit='D' origin=(pd.Timestamp('2020-03-03')))
我已经研究了时间增量和偏移量,但我似乎无法得到它。。。
我只是觉得我做错了什么,我只是想看到一个更像蟒蛇的方式来做这件事
谢谢不确定日期来自何处,但如果您试图手动输入,您可以将其字符串格式化为时间戳:
将熊猫作为pd导入
从日期时间导入日期时间
def parseDT(输入_dt,ts):
out=datetime.strtime(f'{input_dt}{ts}','%Y-%m-%d%H:%m:%S.%f')
返回(输出)
输入_dt='2020-04-20'
vfx_-df['UTC_-DATETIME']=[vfx_-df['UTC_-TIME']中ts的解析数据(输入数据,ts)]
这将产生:
In [34]: vfx_df
Out[34]:
UTC_TIME FOCUS IRIS ZOOM PAN TILT ROLL LONGITUDE LATITUDE ALTITUDE RED_RECORD UTC_DATETIME
0 23:2:24.1 10.9 32.0 180.0 16.7 -29.5 -0.0 151.206135 -33.729484 1614.3 0 2020-04-20 23:02:24.100
1 23:2:24.2 10.9 32.0 180.0 16.7 -29.5 -0.0 151.206135 -33.729484 1614.3 0 2020-04-20 23:02:24.200
2 23:2:24.3 10.9 32.0 180.0 16.7 -29.5 -0.0 151.206135 -33.729484 1614.3 0 2020-04-20 23:02:24.300
In [100]: parse_dt('23:2:24.1', 'EST', 2020, 4, 20)
Out[100]: datetime.datetime(2020, 4, 20, 2, 2, 24, 100000, tzinfo=<StaticTzInfo 'EST'>)
编辑:添加时区转换 由于听起来你的日期和时间不同步,你必须将时间调整到你的日期应该在的时区,然后输入日期
pytz
库:从日期时间导入日期时间
进口皮茨
定义解析日期(输入日期、目标日期、年、月、日):
ts=datetime.strtime(f'{input_ts}','%H:%M:%S.%f')#默认为UTC
ts_adj=ts.astimezone(pytz.timezone(target_tz))#转换为时区
替换(年=年,月=月,日=日)
返回(输出)
这将产生:
In [34]: vfx_df
Out[34]:
UTC_TIME FOCUS IRIS ZOOM PAN TILT ROLL LONGITUDE LATITUDE ALTITUDE RED_RECORD UTC_DATETIME
0 23:2:24.1 10.9 32.0 180.0 16.7 -29.5 -0.0 151.206135 -33.729484 1614.3 0 2020-04-20 23:02:24.100
1 23:2:24.2 10.9 32.0 180.0 16.7 -29.5 -0.0 151.206135 -33.729484 1614.3 0 2020-04-20 23:02:24.200
2 23:2:24.3 10.9 32.0 180.0 16.7 -29.5 -0.0 151.206135 -33.729484 1614.3 0 2020-04-20 23:02:24.300
In [100]: parse_dt('23:2:24.1', 'EST', 2020, 4, 20)
Out[100]: datetime.datetime(2020, 4, 20, 2, 2, 24, 100000, tzinfo=<StaticTzInfo 'EST'>)
产生
In [108]: parse_dt('23:2:24.1', 6, 2020, 4, 20)
Out[108]: datetime.datetime(2020, 4, 20, 17, 2, 24, 100000)
不确定日期来自何处,但如果您试图手动输入,可以将其字符串格式设置为时间戳:
将熊猫作为pd导入
从日期时间导入日期时间
def parseDT(输入_dt,ts):
out=datetime.strtime(f'{input_dt}{ts}','%Y-%m-%d%H:%m:%S.%f')
返回(输出)
输入_dt='2020-04-20'
vfx_-df['UTC_-DATETIME']=[vfx_-df['UTC_-TIME']中ts的解析数据(输入数据,ts)]
这将产生:
In [34]: vfx_df
Out[34]:
UTC_TIME FOCUS IRIS ZOOM PAN TILT ROLL LONGITUDE LATITUDE ALTITUDE RED_RECORD UTC_DATETIME
0 23:2:24.1 10.9 32.0 180.0 16.7 -29.5 -0.0 151.206135 -33.729484 1614.3 0 2020-04-20 23:02:24.100
1 23:2:24.2 10.9 32.0 180.0 16.7 -29.5 -0.0 151.206135 -33.729484 1614.3 0 2020-04-20 23:02:24.200
2 23:2:24.3 10.9 32.0 180.0 16.7 -29.5 -0.0 151.206135 -33.729484 1614.3 0 2020-04-20 23:02:24.300
In [100]: parse_dt('23:2:24.1', 'EST', 2020, 4, 20)
Out[100]: datetime.datetime(2020, 4, 20, 2, 2, 24, 100000, tzinfo=<StaticTzInfo 'EST'>)
编辑:添加时区转换 由于听起来你的日期和时间不同步,你必须将时间调整到你的日期应该在的时区,然后输入日期
pytz
库:从日期时间导入日期时间
进口皮茨
定义解析日期(输入日期、目标日期、年、月、日):
ts=datetime.strtime(f'{input_ts}','%H:%M:%S.%f')#默认为UTC
ts_adj=ts.astimezone(pytz.timezone(target_tz))#转换为时区
替换(年=年,月=月,日=日)
返回(输出)
这将产生:
In [34]: vfx_df
Out[34]:
UTC_TIME FOCUS IRIS ZOOM PAN TILT ROLL LONGITUDE LATITUDE ALTITUDE RED_RECORD UTC_DATETIME
0 23:2:24.1 10.9 32.0 180.0 16.7 -29.5 -0.0 151.206135 -33.729484 1614.3 0 2020-04-20 23:02:24.100
1 23:2:24.2 10.9 32.0 180.0 16.7 -29.5 -0.0 151.206135 -33.729484 1614.3 0 2020-04-20 23:02:24.200
2 23:2:24.3 10.9 32.0 180.0 16.7 -29.5 -0.0 151.206135 -33.729484 1614.3 0 2020-04-20 23:02:24.300
In [100]: parse_dt('23:2:24.1', 'EST', 2020, 4, 20)
Out[100]: datetime.datetime(2020, 4, 20, 2, 2, 24, 100000, tzinfo=<StaticTzInfo 'EST'>)
产生
In [108]: parse_dt('23:2:24.1', 6, 2020, 4, 20)
Out[108]: datetime.datetime(2020, 4, 20, 17, 2, 24, 100000)
拍摄日期存储在哪里?它只是一个需要手动输入的字符串
UTC\u date\u filmed=“03-03-2020”
拍摄日期存储在哪里?它只是一个需要手动输入的字符串UTC\u date\u filmed=“03-03-2020”
right ok list理解然后转换为\u datetime,我仍然需要将其放回df右侧?这似乎有效:vfx\u df['UTC\u TIME']=pd.to\u datetime(dts,格式='%Y-%m-%d%H:%m:%S.%f')
Yep,刚刚编辑了上面的内容,将其追加回数据帧。也合并为一个循环。很好,但请注意时间是23:2:24……等几百次之后,他们切换到0:0:00——第二天是UTC时间,使得午夜后的每一次都是错误的一天。。这就是为什么我要把重点放在导入上的“origin”导入标记上。有没有办法像“原点”一样设置。还是我必须手动处理条件语句。。。。。??谢谢。听起来你需要从UTC转换到其他时区。您可以使用中的pytz
库设置datetime上的时区,或者将时区偏移量设置为字符串格式,或者使用timedelta
进行偏移,并添加/减去将时间转换为所需时区所需的小时数。更新postright ok列表理解,然后转换为_datetime,我仍然需要将其放回df中,对吗?这似乎有效:vfx\u df['UTC\u TIME']=pd.to\u datetime(dts,格式='%Y-%m-%d%H:%m:%S.%f')
Yep,刚刚编辑了上面的内容,将其追加回数据帧。也合并为一个循环。很好,但请注意时间是23:2:24……等几百次之后,他们切换到0:0:00——第二天是UTC时间,使得午夜后的每一次都是错误的一天。。这就是为什么我要把重点放在导入上的“origin”导入标记上。有没有办法像“原点”一样设置。还是我必须手动处理条件语句。。。。。??谢谢。听起来你需要从UTC转换到其他时区。您可以使用中的pytz
库设置datetime上的时区,或者将时区偏移量设置为字符串格式,或者使用timedelta
进行偏移,并添加/减去将时间转换为所需时区所需的小时数。更新帖子