Python 在datetime索引中,如何将所有日期更改为特定日期。或起源

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

我有一个来自日志文件的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, 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
    进行偏移,并添加/减去将时间转换为所需时区所需的小时数。更新帖子