2016-12-05 8 views
1

私は1つの列がエポックのUnix秒であることに時間を交換するための簡潔な方法だろう何パンダシリーズ:文字列の日付のUNIX秒エポック

0    time 
1 September 20 2016 
2 September 20 2016  
3 September 19 2016  
4 September 16 2016 

以下のように文字列の日付フォーマットであるパンダのデータフレームを持っています?

答えて

1

Series 'applyメソッドを使用して列の値を変更するには、それぞれの値のに実行するアクションを含む関数を与えます。

を使用してdatetimeを処理する場合は、任意の文字列をdatetimeオブジェクトに解析できます。

import datetime 
import pandas as pd 
from dateutil.parser import parse 

s = pd.Series(['September 20 2016', 
'September 20 2016', 
'September 19 2016', 
'September 16 2016']) 
df = pd.DataFrame(s) 

def dt2epoch(value): 
    d = parse(value) 
    epoch = (d - datetime.datetime(1970,1,1)).total_seconds() 
    return epoch  

df[0].apply(dt2epoch) # apples given function to each value of column 

結果:

0 1474329600 
1 1474329600 
2 1474243200 
3 1473984000 
Name: 0, dtype: float64 
1

お試しください。to_datetime

import pandas as pd 
your_df['time']=pd.to_datetime(your_df['time']) 

編集: datetimeオブジェクトからエポックを取得するには、10^9で、あなたにエポックからナノ秒の数、および除算を与えるであろう、Int64のオブジェクトに直列に変換することができます(数1秒でナノ秒)。あなたは時系列でnatオブジェクトを持っている場合、彼らはとして表示されます:あなたは(部門があなたの代わりに浮かぶ与える)

注整数でそれを持っているしたい場合は、最後の変換が必要とされている

import numpy as np 
your_df['time'] = (pd.to_datetime(your_df['time']).astype(np.int64)/10**9).astype(np.int64) 

整数値-9223372036であり、それらを前もってフィルタリングするか、またはNaNとして出力させることができます(この場合、結果の系列はintではなくfloat型でなければなりません)。

+0

私は '不明な文字列フォーマット' というエラーを取得しています。私は正しいと思われるformat = '%B%d%Y'引数を使用しています... –

+1

私の場合、上記の4つの文字列で動作します。列に不正なデータ、つまり文字列パターンと一致しない1つ以上の行がある可能性はありますか? – ilmarinen

+0

ああ、私は間違ったデータを整理することによってフォーマットエラーを解決しましたが、上記の関数は私に、epoch秒ではなく、一連のPython datetimeオブジェクトを与えます。 –

関連する問題