2017-06-18 11 views
3

私のpandasデータフレーム内の列は、datetimeで計算した後、csvにエクスポートしてpandasデータフレームに読み込んだ時間デルタを表します。今は列のdtypeはオブジェクトですが、データフレーム上でgroupby関数を実行できるように、私はそれをtimedeltaにします。以下は、文字列の外観です。ありがとう!文字列をdatetime timedeltaに戻す

0 days 00:00:57.416000 
    0 days 00:00:12.036000 
    0 days 16:46:23.127000 
49 days 00:09:30.813000 
50 days 00:39:31.306000 
55 days 12:39:32.269000 
-1 days +22:03:05.256000 

更新、私のパンダのデータフレーム内の特定の列を反復処理するために、ループの書き込みで私の最高の試み:あなたはCSVからそれぞれの値をループし、このような何かを行うことができ

def delta(i): 
    days, timestamp = i.split(" days ") 
    timestamp = timestamp[:len(timestamp)-7] 
    t = datetime.datetime.strptime(timestamp,"%H:%M:%S") + 
    datetime.timedelta(days=int(days)) 
    delta = datetime.timedelta(days=t.day, hours=t.hour, 
    minutes=t.minute, seconds=t.second) 
    delta.total_seconds() 

data['diff'].map(delta) 
+0

あなたは数秒ではtimedeltaを持っていたいですか? – user1767754

+0

彼らは理想的です! –

答えて

2

使用pd.to_timedelta

pd.to_timedelta(df.iloc[:, 0]) 

0  0 days 00:00:57.416000 
1  0 days 00:00:12.036000 
2  0 days 16:46:23.127000 
3 49 days 00:09:30.813000 
4 50 days 00:39:31.306000 
5 55 days 12:39:32.269000 
6 -1 days +22:03:05.256000 
Name: 0, dtype: timedelta64[ns] 
+1

この回答は間違いなく良いです。私はパンダが 'to_timedelta'機能を持っていたことを知らなかった、良い1 PiRSquared – user1767754

+0

ありがとう、それは魅力のように働いた! –

0

文字列の代わりに:

stringdate = "2 days 00:00:57.416000" 
days_v_hms = string1.split('days') 
hms = days_v_hms[1].split(':') 
dt = datetime.timedelta(days=int(days_v_hms[0]), hours=int(hms[0]), minutes=int(hms[1]), seconds=float(hms[2])) 

乾杯!

1
import datetime 

#Parse your string 
days, timestamp = "55 days 12:39:32.269000".split(" days ") 
timestamp = timestamp[:len(timestamp)-7] 

#Generate datetime object 
t = datetime.datetime.strptime(timestamp,"%H:%M:%S") + datetime.timedelta(days=int(days)) 

#Generate a timedelta 
delta = datetime.timedelta(days=t.day, hours=t.hour, minutes=t.minute, seconds=t.second) 

#Represent in Seconds 
delta.total_seconds() 
+0

パンダのデータフレーム内の特定の列でこれを反復するにはどうすればよいですか?ありがとうございました - 私は私の質問の更新として私の最高の試みを掲載しました!それは新しい列にすることもできます.... –

+1

@GrahamStreich 'map'を使うべきです、このhttps://stackoverflow.com/a/19798528/5496463を参照してください。 – danche

+0

ありがとう。私は関数を作り、mapメソッドでそれを適用しましたが、私は別の問題を見つけました。いくつかの時間には「+」または「 - 」記号が付いています...これらのことをどのように説明しますか...私は私の質問のデータを更新して、私が何を意味するのかを示し、コードを使用して、私が書いた関数と、どのようにマップメソッドを使用しているかを示します。再度、感謝します! –

関連する問題