【问题标题】:Merge multiple data files (with multiple columns) that are parts of a time series合并属于时间序列的多个数据文件(具有多列)
【发布时间】:2019-07-09 09:14:19
【问题描述】:

我有一个时间序列的多个时间序列数据(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的身份读取文件,
  • 定义的标头,
  • 将“日期”列设置为每个DataFrameindex

然后我想joinDataFrames 到完整的时间序列:

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

但我收到一个错误:

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

为了检查问题是否真的出在标题中,我合并了标题略有不同的文件(不同的标题 = 不同的传感器)。然后我收到了:

    complete_df = ({' ':[01/04/2019 00:00:01, 01/04/2019 00:00:01 , 01/04/2019 00:00:01,
    'Cond [mS/cm]': [NaN, NaN, NaN],
    'Temp [C]': [NaN, NaN, NaN],
    'Sal [PSU]': [NaN, NaN, NaN],
    'Cond_2 [mS/cm]': [NaN, NaN, NaN],
    'Temp_2 [C]': [NaN, NaN, NaN],
    'Sal_2 [PSU]': [NaN, NaN, NaN]}) 

这很合理,只是数据的顺序不正确。

我的问题是:我应该如何组合所有 DataFrame 以获得一个大 DataFrame?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    将您的日期作为字符串传递,而不是将它们转换为 DateTime。之后使用 pd.concat。仍然存在您可能不必要地复制列的问题(Cond[mS/cm]、Cond_2[mS/cm])。或者,您可以将所有列命名为相同并传递一个带有传感器标识符的附加列(即“传感器”: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)
    

    【讨论】:

      猜你喜欢
      • 2022-11-27
      • 1970-01-01
      • 2010-10-05
      • 2019-07-13
      • 2017-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-25
      相关资源
      最近更新 更多