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')))
应该可以,而且可能是最快的。
我在一个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')))
应该可以,而且可能是最快的。