gpt4 book ai didi

python - 合并属于时间序列一部分的多个数据文件(具有多个列)

转载 作者:行者123 更新时间:2023-12-01 07:37:03 25 4
gpt4 key购买 nike

我有多个时间序列数据(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
  • 定义 header ,
  • 将“日期”列设置为每个 DataFrame索引

然后我想通过以下方式加入 DataFrames到完整的时间序列:

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

但我收到一个错误:

ValueError: Indexes have overlapping values: Index(['Cond [mS/cm]', 'Press [DBar]', 'Temp [C]', 'Sal [PSU]', 'Dens.anom [kg/m3]', 'SOS [m/s]'], dtype='object')

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

    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?

最佳答案

将日期作为字符串传递,然后将其转换为日期时间。之后使用 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

关于python - 合并属于时间序列一部分的多个数据文件(具有多个列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56943735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com