以下转换(ms - > datetime - >转换时区)需要很长时间才能运行(4分钟),可能是因为我正在使用大型数据帧:
for column in ['A', 'B', 'C', 'D', 'E']:
# Data comes in unix time (ms) so I need to convert it to datetime
df[column] = pd.to_datetime(df[column], unit='ms')
# Get times in EST
df[column] = df[column].apply(lambda x: x.tz_localize('UTC').tz_convert('US/Eastern'))
有没有办法加快速度?我是否已经以最有效的方式使用Pandas数据结构和方法?
答案 0 :(得分:7)
这些可用作DatetimeIndex方法,它们很多更快:
df[column] = pd.DatetimeIndex(df[column]).tz_localize('UTC').tz_convert('US/Eastern')
注意:在0.15.0中,您可以访问系列dt accessor:
df[column] = df[column].dt.tz_localize('UTC').tz_convert('US/Eastern')
答案 1 :(得分:0)
我会使用date命令在Bash中尝试一下。对于例行转换,日期证明比甚至更快。 Python可能会对此感到困惑。
为了加快速度,可以更快地将A中的列导出到一个临时文件中,将列B导出到另一个临时文件中,等等。 (你甚至可以在python中这样做)。然后并行运行5列。
for column in ['A']:
print>>thefileA, column
for column in ['B']:
print>>thefileB, column
然后是一个bash脚本:
#!/usr/bin/env bash
readarray a < thefileA
for i in $( a ); do
date -r item: $i
done
您需要一个主bash脚本来运行python python pythonscript.py
中的第一部分。然后,您将要从主./FILEA.sh &
调用后台的每个bash脚本。这将单独运行每个列并自动指定节点。对于我在readarray之后的bash循环,我不是100%,这是正确的语法。如果您使用的是Linux,请使用date -d @ item
。