【发布时间】: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