2014-09-06 152 views
0

我在包含間歇性NaT值的DataFrame上使用groupby.median()和groupby.mean()時遇到了一些麻煩。具體來說,我有一個數據集中的幾列來計算基於其他列的各種時間差異。在某些情況下,沒有時間存在差異,從而導致類似下面的例子在NAT值:Python Pandas Groupby刪除日期時間列

Group Category Start Time  End Time  Time Diff 
    A   1  08:00:00.000 08:00:00.500  .500 
    B   1  09:00:00.000 09:02:00.000 2:00.000 
    B   1  09:00:00.000  NaT   NaT 
    A   2  09:00:00.000 09:02:00.000 2:00.000 
    A   2  09:00:00.000 09:01:00.000 1:00.000 
    A   2  08:00:00.000 08:00:01.500  1.500 

任何時候,我跑df.groupby(['Group', 'Category'].median().mean()包含的NaT任何列從結果集中刪除。我試過fillna,但NaT似乎仍然存在。作爲上下文的一個附加點,該腳本在舊版本的Anaconda Python(1.x)中正常工作。我最近能夠將我的工作計算機升級到2.0.1,此時此問題開始蔓延。

編輯:我會留下我對NaT上面的想法,如果他們是一個因素,但經過進一步的審查,似乎我的問題實際上在於這些列是timedelta64s。有沒有人知道任何解決方法來獲取timedeltas的平均數/中位數?

非常感謝您的任何見解!

+0

你有什麼版本的熊貓? – joris 2014-09-06 08:34:42

+0

@joris我有熊貓0.14.0。我確實想出了一個解決方法 - 請參閱下面的回覆。 – wrcobb 2014-09-06 15:28:39

回答

0

經過一些進一步的谷歌搜索/實驗後,我確認這個問題似乎與列號爲timedelta64有關。爲了對這些列執行pd.groupby我首先將它們轉換爲浮動像這樣:

df['End Time'] = df['End Time'].astype('timedelta64[ms]')/86400000

有可能是一個更優雅的解決方案,這一點,但這個讓我與我的分析前進。

謝謝!

+1

這確實是大熊貓的當前侷限性,有一個問題需要解決(https://github.com/pydata/pandas/pull/6884),希望它能得到版本0.15 – joris 2014-09-06 16:07:24

+0

@joris很好,謝謝你的傳球沿着鏈接。我會密切關注這個問題。非常感激 – wrcobb 2014-09-06 17:02:37