2017-09-04 74 views
1

我有多个包含测量数据的csv文件,我需要合并到一个Pandas DataFrame中,并将日期/时间作为索引。我曾尝试使用pd.concat,但是,这只会将csv文件添加到一起,并且不会正确“排序”它们。使用日期索引从多个csv文件创建熊猫DataFrame

示例文件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

您需要列表理解与glob其返回的文件名,然后使用设置的第二列参数index_col, parse_datesDatetimeIndex和参数decimal的转换VALUE列数字。

DataFrame的最后一concat列表,并在必要时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中的一列吗?这将使数据访问更容易,因为我currenlty必须做df [df ['NAME'] =='SO.DA']来访问每个传感器 (我不在乎单位) –

+0

您是否认为' df = pd.concat(dfs).sort_index()。reset_index()。set_index('NAME')'? – jezrael