【问题标题】:Creating pandas DataFrame from multiple csv files with date index从具有日期索引的多个 csv 文件创建 pandas DataFrame
【发布时间】:2018-02-12 13:52:30
【问题描述】:

我有多个包含测量数据的 csv 文件,我需要将它们合并到一个以日期/时间为索引的 Pandas DataFrame 中。我尝试过使用 pd.concat,但是,这只会将 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

如何将文件导入到一个 DataFrame 中,使其按索引和名称排序??

【问题讨论】:

    标签: python pandas csv


    【解决方案1】:

    您需要使用返回文件名的glob 进行列表理解,然后使用参数index_col, parse_dates 将第二列设置为DatetimeIndex,并使用参数decimalVALUE 列转换为数字。

    DataFrames 的最后一个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
    

    【讨论】:

    • 如果我需要 DataFrame 的格式为:日期 SO.DA.TT.401.1 SO.DA.TT.401.2 .... 2014-06-16 51.9 60.8 ....即每个csv 文件是DataFrame 中的一列?这将使数据访问更容易,因为我现在必须执行 df[df['NAME']=='SO.DA'] 来访问每个传感器(我不关心单位)
    • 你觉得df = pd.concat(dfs).sort_index().reset_index().set_index('NAME') 吗?
    猜你喜欢
    • 2021-04-11
    • 1970-01-01
    • 2021-07-07
    • 2012-08-28
    • 2019-03-24
    • 2014-02-09
    • 2021-01-20
    • 2013-11-18
    相关资源
    最近更新 更多