pandas 数据帧中的日期解析和时区调整

Date parsing and timezone adjusting in pandas dataframes

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

方法一(肯定很慢):

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 实现它?

方法 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')))

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