加快时间戳操作

时间:2014-09-04 03:29:56

标签: python pandas

以下转换(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数据结构和方法?

2 个答案:

答案 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