2014-09-04 84 views
3

下變換(MS - >日期時間 - > CONVER時區)需要很長的時間來運行(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數據結構和方法?

回答

6

這些都可以作爲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') 
+0

謝謝,雖然第一個選項似乎不適用於** 0.14.1 **。我在'tz_localize'中得到一個錯誤,說'TypeError:index不是有效的DatetimeIndex或PeriodIndex'。 – 2014-09-04 12:53:38

+0

Andy,我的'.dt'命名空間下沒有'tz_localize'。這是否實施?這將是超級有用的。 – TomAugspurger 2014-09-04 14:39:44

+0

@ user815423426這很奇怪,這聽起來像列沒有正確地轉換爲日期,因此DatetimeIndex失敗...做了你的to_datetime行工作 - 你檢查結果dtype?這可能有點費勁。 – 2014-09-04 17:25:38

0

我會在Bash中使用date命令嘗試這個嘗試。日期證明比常規轉換的gawk更快。 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