2017-09-04 15 views
1

私は複数のcsvファイルに測定データがあります。これは、日付/時刻をインデックスとして1つのPandas DataFrameにマージする必要があります。私はpd.concatを使ってみましたが、これはcsvファイルを一緒に追加するだけで、正しくソートしません。日付インデックスを持つ複数のcsvファイルからパンダを作成する

例ファイル1:

NAME;DATE;VALUE;UNIT 
    SO.DA.TT.401.3;01-01-2015 00:00:00;14,9;°C 
    SO.DA.TT.401.3;01-01-2015 00:10:00;14,9;°C 

例ファイル2:

NAME;DATE;VALUE;UNIT 
    SO.DA.TT.401.3;16-06-2014 20:50:00;51,9;°C 
    SO.DA.TT.401.3;16-06-2014 21:00:00;51,8;°C 

どのように私は、彼らが1 DATAFRAMEへのインデックスと名前の両方によってソートされているようにファイルをインポートできますか?

答えて

1

あなたは、数値に変換するためにDatetimeIndexとパラメータdecimalVALUE列を設定された第2列のパラメータindex_col, parse_datesを使用し、その後、ファイル名を返すglobとリストの内包が必要です。

最終concatDataFrame秒のリストとsort_index必要に応じて:

files = glob.glob('files/*.csv') 
#second column convert to datetimeindex 
dfs = [pd.read_csv(fp, sep=';',index_col=[1], parse_dates=[1], decimal=',') for fp in files] 
df = pd.concat(dfs).sort_index() 
print (df) 

           NAME VALUE UNIT 
DATE           
2014-06-16 20:50:00 SO.DA.TT.401.3 51.9 °C 
2014-06-16 21:00:00 SO.DA.TT.401.3 51.8 °C 
2015-01-01 00:00:00 SO.DA.TT.401.3 14.9 °C 
2015-01-01 00:10:00 SO.DA.TT.401.3 14.9 °C 
+0

私は形態であるデータフレームが必要な場合はどう: 日付SO.DA.TT.401.1のSO.DA.TT.401.2 .... 2014-06-16 51.9 60.8 .... つまり、各CSVファイルはDataFrameの列ですか?これは、各センサーにアクセスするためにdf ['NAME'] == 'SO.DA']を実行する必要があるため、データアクセスがずっと簡単になります (私はユニットを気にしません) –

+0

あなたは ' df = pd.concat(dfs).sort_index()。reset_index()。set_index( 'NAME') '? – jezrael

関連する問題