2017-06-28 34 views
2

私はいくつかのデータを読んでおり、データにテキストタイムスタンプHH:MM:SS:000000が含まれているfrom_recordsでデータフレームを作成しています。私はpd.to_datetime(data.timestamp, format='%H:%M:%S:%f')でtimeseriesに変換することができます。私はファイル名からファイルの日付を知っています。日付を挿入する(そして最終的にはインデックスとして設定する)pythonicとperformantな方法は何ですか?pandasデータフレームに固定日付を追加する

データは次のようになります。

1900-01-01 12:00:00.000000 100 
1900-01-01 12:00:01.123456 200 
1900-01-01 12:00:02.000000 300 

そして、何私がしたいと思う(date = datetime.date(2017, 6, 28)を与えられます:

2017-06-28 12:00:00.000000 100 
2017-06-28 12:00:01.123456 200 
2017-06-28 12:00:02.000000 300 
日付なしで

12:00:00:000000 100 
12:00:01:123456 200 
12:00:02:000000 300 

は、私がどのように見えるデータフレームを取得し、挿入します

pd.to_datetimeorigin argが私の望むように聞こえる、b文字列ではなく数値のタイムスタンプとして入力する必要があります。

+0

あなたは 'df.index + = date'を実行するだけです。それはとにかく私のために働いた。 –

答えて

2

あなたは日からstrftimeで文字列を作成し、列timeに追加することができます

df['datetime'] = pd.to_datetime(date.strftime('%Y-%m-%d ') + df['time'], 
           format='%Y-%m-%d %H:%M:%S:%f') 

print (df) 
       time A     datetime 
0 12:00:00:000000 100 2017-06-28 12:00:00.000000 
1 12:00:01:123456 200 2017-06-28 12:00:01.123456 
2 12:00:02:000000 300 2017-06-28 12:00:02.000000 

とインデックスのために:

df.index = pd.to_datetime(date.strftime('%Y-%m-%d ') + df['time'], 
           format='%Y-%m-%d %H:%M:%S:%f') 

print (df) 
             time A 
time            
2017-06-28 12:00:00.000000 12:00:00:000000 100 
2017-06-28 12:00:01.123456 12:00:01:123456 200 
2017-06-28 12:00:02.000000 12:00:02:000000 300 

別の解決策:ここ

date = datetime.date(2017, 6, 28) 
days = date - datetime.date(1900, 1, 1) 

df['datetime'] = pd.to_datetime(df['time'],format='%H:%M:%S:%f') + 
       pd.to_timedelta(days, unit='d') 

print (df) 
       time A     datetime 
0 12:00:00:000000 100 2017-06-28 12:00:00.000000 
1 12:00:01:123456 200 2017-06-28 12:00:01.123456 
2 12:00:02:000000 300 2017-06-28 12:00:02.000000 
+0

機能は動作しますが、文字列との間で日付を解析する必要がない高速な方法がありますか? (私には何千万もの行がある)。 – Kyle

+0

別の解決策はどうですか? – jezrael

0

は何ですか私は@ jezraelの 'Another'の答えに基づいて終わった:

df.index = pd.to_datetime(df.timestamp, format='%H:%M:%S:%f') 
days = date - df.index[0].date() 
df.index += pd.to_timedelta(days, unit='d') 
関連する問題