合并属于时间序列的多个数据文件(具有多列)

时间:2019-07-08 23:43:09

标签: python pandas dataframe

我有多个形成一个时间序列的时间序列数据(txt文件)。 这是一个过于简化的示例:

    import pandas as pd
    import datetime as dt

    df1_1 = pd.DataFrame({'Date': [15/03/2019 10:00:11.000, 15/03/2019 10:00:12.000 , 15/03/2019 10:00:13.000],
   'Cond [mS/cm]': [7.45, 7.45, 7.45],
   'Temp [C]': [8.22, 8.22, 8.22],
    'Sal [PSU]': [7.63, 7.63, 7.63]})

    df1_2 = pd.DataFrame({'Date': [30/03/2019 10:00:11.000, 30/03/2019 10:00:12.000 , 30/03/2019 10:00:13.000],
   'Cond [mS/cm]': [7.45, 7.45, 7.45],
   'Temp [C]': [8.22, 8.22, 8.22],
    'Sal [PSU]': [7.63, 7.63, 7.63]})

    df2_1 = pd.DataFrame({'Date': [15/03/2019 10:00:11.000, 15/03/2019 10:00:12.000 , 15/03/2019 10:00:13.000],
   'Cond_2 [mS/cm]': [7.47, 7.47, 7.47],
   'Temp_2 [C]': [8.22, 8.22, 8.22],
    'Sal_2 [PSU]': [7.67, 7.67, 7.67]})  

     df2_2 = pd.DataFrame({'Date': [30/03/2019 10:00:11.000, 30/03/2019 10:00:12.000 , 30/03/2019 10:00:13.000],
   'Cond_2 [mS/cm]': [7.47, 7.47, 7.47],
   'Temp_2 [C]': [8.22, 8.22, 8.22],
    'Sal_2 [PSU]': [7.67, 7.67, 7.67]}) 

其中df1表示来自传感器1的数据,df1_1和df_2是时间序列的下一个片段。

我想将所有内容合并为一个大DataFrame

到目前为止,我已经:

  • 包含完整时间序列的生成文件(来自传感器的数据 可能会有意想不到的差距),
  • DataFrames读取文件,
  • 定义的标题,
  • 将“日期”列设置为每个index的{​​{1}}。

然后我想通过以下方式DataFrame join来绘制完整的时间序列:

DataFrames

但是我收到一个错误:

  

ValueError:索引具有重叠的值:Index(['Cond [mS / cm]',   '按[DBar]','温度[C]','Sal [PSU]',          'Dens.anom [kg / m3]','SOS [m / s]'],         dtype ='object')

要检查问题是否确实在标头中,我合并了标头稍有不同的文件(不同的标头=不同的传感器)。然后我得到了:

full_date = dates.join([df1_1, df1_2], how = "outer")  

除了数据顺序不正确外,这是非常合理的。

我的问题是:如何合并所有数据框以获得一个大数据框?

1 个答案:

答案 0 :(得分:1)

将日期作为字符串传递,而不是将其转换为DateTime。之后,使用pd.concat。仍然存在您可能不必要地复制列的问题(Cond [mS / cm],Cond_2 [mS / cm])。或者,您可以将所有列都命名为相同的列,并通过传感器标识符(即“ sensor”:1)再传递一列

import pandas as pd

df1_1 = pd.DataFrame({'Date': ['15/03/2019 10:00:11.000', '15/03/2019 10:00:12.000' , '15/03/2019 10:00:13.000'],
'Cond [mS/cm]': [7.45, 7.45, 7.45],
   'Temp [C]': [8.22, 8.22, 8.22],
    'Sal [PSU]': [7.63, 7.63, 7.63]})

df1_2 = pd.DataFrame({'Date': ['30/03/2019 10:00:11.000', '30/03/2019 10:00:12.000' , "30/03/2019 10:00:13.000"],
   'Cond [mS/cm]': [7.45, 7.45, 7.45],
   'Temp [C]': [8.22, 8.22, 8.22],
    'Sal [PSU]': [7.63, 7.63, 7.63]})

df2_1 = pd.DataFrame({'Date': ['15/03/2019 10:00:11.000', '15/03/2019 10:00:12.000' , '15/03/2019 10:00:13.000'],
   'Cond_2 [mS/cm]': [7.47, 7.47, 7.47],
   'Temp_2 [C]': [8.22, 8.22, 8.22],
    'Sal_2 [PSU]': [7.67, 7.67, 7.67]})  

df2_2 = pd.DataFrame({'Date': ['30/03/2019 10:00:11.000', '30/03/2019 10:00:12.000' , '30/03/2019 10:00:13.000'],
   'Cond_2 [mS/cm]': [7.47, 7.47, 7.47],
   'Temp_2 [C]': [8.22, 8.22, 8.22],
    'Sal_2 [PSU]': [7.67, 7.67, 7.67]}) 

complete_df  = pd.concat([df1_1,df1_2,df2_1,df2_2],ignore_index=True)
complete_df['Date'] = pd.to_datetime(complete_df['Date'])
complete_df.set_index('Date', inplace=True)
complete_df.fillna(0)

enter image description here