2016-04-07 4 views
2

次の形式のCSVファイルがあります。csvファイルの日付と時刻の2つの列をpandasの1つのdatetime列に結合するにはどうすればよいですか?

日付;時刻; DD; FH; FF; FX; T;
20110101; 1; 240; 30; 30; 40; 15;
2010101; 2; 250; 30; 40; 60; 18;
20110101; 3; 250; 40; 40; 70; 21;
201010101; 4; 250; 40; 30; 60; 20;
2010101; 5; 250; 40; 40; 60; 21;

日付と時刻の列を1 datetimeと組み合わせたpandasデータフレームが必要です。

deelen = pandas.read_csv('Deelen2.csv', parse_dates = [[0,1]], header = 0, index_col = 0, delimiter=';', low_memory=False) 

私は次のような出力が得られます: は、私はこれを行うには、次のコードを試してみました

>>> deelen.head() 
      DD  FH  FF  FX  T  
date_time                 
20110101 1 240  30  30  40  15    
20110101 2 250  30  40  60  18    
20110101 3 250  40  40  70  21    
20110101 4 250  40  30  60  20   
20110101 5 250  40  40  60  21 

ので、日付と時刻が1列に組み合わされていますが、日時ではありません。

私も試してみました:

>>> deelen = pandas.read_csv('Deelen2.csv', parse_dates = {'datetime' : [0,1]}, header = 0, index_col = ['datetime'], delimiter=';') 

しかし、これは似て出力できます:それは働いていないいくつかの理由

  DD  FH  FF  FX  T  
datetime                 
20110101 1 240  30  30  40  15    
20110101 2 250  30  40  60  18    
20110101 3 250  40  40  70  21    
20110101 4 250  40  30  60  20   
20110101 5 250  40  40  60  21 

を... を私は、Python 2.7とパンダ0.18で働いています。 0

ご協力いただきありがとうございます

+0

の結果にこれを追加しますあなたの時間列はあいまいですが、ここで時間は何を表していますか?時間、分、秒..? – EdChum

+0

時間の列は時間単位です。 24時間後、日付は20110102などになります – joanne

答えて

0

OK gが動作します:

In [140]: 
import io 
import pandas as pd 
t="""date;time;DD;FH;FF;FX;T; 
20110101;1;240;30;30;40;15; 
20110101;2;250;30;40;60;18; 
20110101;3;250;40;40;70;21; 
20110101;4;250;40;30;60;20; 
20110101;5;250;40;40;60;21;""" 
df = pd.read_csv(io.StringIO(t), sep=';', dtype=({'date':str})) 
df['date_time'] = pd.to_datetime(df['date']) + pd.TimedeltaIndex(df['time'], unit='H') 
df 

Out[140]: 
     date time DD FH FF FX T Unnamed: 7   date_time 
0 20110101  1 240 30 30 40 15   NaN 2011-01-01 01:00:00 
1 20110101  2 250 30 40 60 18   NaN 2011-01-01 02:00:00 
2 20110101  3 250 40 40 70 21   NaN 2011-01-01 03:00:00 
3 20110101  4 250 40 30 60 20   NaN 2011-01-01 04:00:00 
4 20110101  5 250 40 40 60 21   NaN 2011-01-01 05:00:00 

ここで私はそれが失敗した理由があることである、私はこれを変換し、あなたの時間の欄からTimedeltaIndexを構築strとしてdate列のdtypeを指定し、to_datetime

+0

ありがとうございます! – joanne

+0

私のやり方がうまくいかなかった理由を説明することもできますか? – joanne

+0

'201101011'はあいまいに解析できないので、メソッドが機能しませんでした。もし' 20111001'だった場合、フォーマットはちょうど '%Y%m%d'であると推測できますが、これに加えられた' 1'は意味がありません – EdChum

関連する問題