【问题标题】:Date parsing and timezone adjusting in pandas dataframes熊猫数据框中的日期解析和时区调整
【发布时间】:2015-07-25 12:33:46
【问题描述】:

我在一个数据框中有大约 800,000 行数据,其中一列数据 df['Date'] 是时间和日期字符串 'YYYY-MM-DD HH:MM:SS.fff',它没有时区信息。但是我知道他们在 New_York 时区,他们需要转换为 CET。现在我有两种方法可以完成工作:

方法1(肯定很慢):

df['Date'].apply(lambda x: timezone('America/New_York')\
            .localize(datetime.datetime.strptime(x,'%Y%m%d%H:%M:%S.%f'))\
            .astimezone(timezone('CET')))

方法二:

df.index = pd.to_datetime(df['Date'],format='%Y%m%d%H:%M:%S.%f')
df.index.tz_localize('America/New_York').tz_convert('CET')

我只是想知道是否还有其他更好的方法可以做到这一点?或我列出的方法的任何潜在缺陷?谢谢!

另外,我想将所有时间戳移动一个固定的时间,例如 1ms timedelta(0,0,1000),我该如何使用方法 2 来实现它?

【问题讨论】:

  • 我希望第二种方法明显更快,第一种方法是按行执行转换,这就是我要这样做的方式
  • 无论如何,第二种是“熊猫”的方式(使用内置函数),所以我认为无需寻找其他方式
  • 如果我想将所有时间戳移动一个 1 毫秒(timedelta(0,0,1000))的时间,我该怎么做?
  • 您可以构造一个 timedelta 并将其添加以抵消它,例如 df['Date'] + pd.Timedelta(1, unit='ms')

标签: python datetime pandas timestamp


【解决方案1】:

方法 2 绝对是最好的方法。

但是,我想到您在加载数据后正在格式化此日期。

在加载文件时解析日期比在加载文件后更改日期要快得多。 (更不用说清洁剂了)

如果您的数据是使用 pandas.read_csv() 函数从 csv 文件加载的,那么您可以使用 parse_dates= 选项和 date_parser= 选项。

您可以直接使用您的 lambda 函数作为 date_parser= 进行尝试 并将parse_dates= 设置为您的日期列列表。

像这样:

pd.read_csv('myfile.csv', parse_dates=['Date'] date_parser=lambda x: timezone('America/New_York')\
        .localize(datetime.datetime.strptime(x,'%Y%m%d%H:%M:%S.%f'))\
        .astimezone(timezone('CET')))

应该可以工作,而且可能是最快的。

【讨论】:

    猜你喜欢
    • 2022-01-10
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 2021-08-29
    • 2019-08-01
    • 2016-06-04
    • 2017-12-01
    • 2020-01-14
    相关资源
    最近更新 更多