Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:替换时间序列中缺少的值_Python_Python 3.x_Pandas_Datetime_Time Series - Fatal编程技术网

Python:替换时间序列中缺少的值

Python:替换时间序列中缺少的值,python,python-3.x,pandas,datetime,time-series,Python,Python 3.x,Pandas,Datetime,Time Series,我目前正在处理来自不同气象站的气象数据。不幸的是,有时会丢失数据。我编写了一个例程,将来自所有站点的数据合并到一个数据帧中,并实现了一个“NaN_Flag”列,该列显示某个时间点丢失的数据 现在的计划是用附近台站的数据填补这些数据空白。对于温度和湿度,插值是可能的,但取决于间隙的大小并不理想。 对于降雨事件,插值没有任何意义 第一列是包含日期、时间和位置的索引列。现在,我正在寻找一种解决方案,如果“NaN_标志”显示“1”,则填写另一个位置(同时)的测量数据 因此,在下面的简化示例中,我希望01

我目前正在处理来自不同气象站的气象数据。不幸的是,有时会丢失数据。我编写了一个例程,将来自所有站点的数据合并到一个数据帧中,并实现了一个“NaN_Flag”列,该列显示某个时间点丢失的数据

现在的计划是用附近台站的数据填补这些数据空白。对于温度和湿度,插值是可能的,但取决于间隙的大小并不理想。 对于降雨事件,插值没有任何意义

第一列是包含日期、时间和位置的索引列。现在,我正在寻找一种解决方案,如果“NaN_标志”显示“1”,则填写另一个位置(同时)的测量数据

因此,在下面的简化示例中,我希望01-01-01 00:20:00位置1的数据集 自动替换为定位2的相同日期时间的数据。所以每个位置都有一个“备份”位置,每次“NaN_标志”显示“1”数据时,都会自动用相应的备份数据替换。 有人知道如何做到这一点吗

DATETIME_UTC_LOCATION           DATETIME_UTC              LOCATION    TEMP   PLUV   HUM   NaN_FLAG 
2020-01-01 00:00:00 Location1   2020-01-01 00:00:00       Location1   5.25   0.0    87.3  0
2020-01-01 00:10:00 Location1   2020-01-01 00:10:00       Location1   6.12   0.1    85.0  0
2020-01-01 00:20:00 Location1   2020-01-01 00:20:00       Location1                       1
2020-01-01 00:00:00 Location2   2020-01-01 00:00:00       Location2   5.12   0.0    88.9  0
2020-01-01 00:10:00 Location2   2020-01-01 00:10:00       Location2   6.25   0.1    84.3  0
2020-01-01 00:20:00 Location2   2020-01-01 00:20:00       Location2   6.75   0.2    82.5  0


如果您拥有的数据帧具有与此数据帧等效的格式:

import pandas as pd
import numpy as np


df = pd.DataFrame(data={'month': ["Jan","Feb","Mar","Jan","Feb","Mar"],
                        'station': ["station_1","station_1","station_1","station_2","station_2","station_2"],
                        'values': [3.2, np.nan, 4.1, 3.6, 5.8, 4.2]}).set_index('month')
输出:

              station   values
    month       
    Jan       station_1    3.2
    Feb       station_1    NaN
    Mar       station_1    4.1
    Jan       station_2    3.6
    Feb       station_2    5.8
    Mar       station_2    4.2
您可以使用:

df.loc[df['station'] == "station_1"] = df.loc[df['station'] == "station_1"].fillna(df.loc[df['station'] == "station_2"])
用桩号1的NaN值替换桩号2的等效值。我所说的“等价”是指“月”指数中的匹配

输出:

              station   values
    month       
    Jan       station_1    3.2
    Feb       station_1    5.8
    Mar       station_1    4.1
    Jan       station_2    3.6
    Feb       station_2    5.8
    Mar       station_2    4.2

如果您拥有的数据帧具有与此数据帧等效的格式:

import pandas as pd
import numpy as np


df = pd.DataFrame(data={'month': ["Jan","Feb","Mar","Jan","Feb","Mar"],
                        'station': ["station_1","station_1","station_1","station_2","station_2","station_2"],
                        'values': [3.2, np.nan, 4.1, 3.6, 5.8, 4.2]}).set_index('month')
输出:

              station   values
    month       
    Jan       station_1    3.2
    Feb       station_1    NaN
    Mar       station_1    4.1
    Jan       station_2    3.6
    Feb       station_2    5.8
    Mar       station_2    4.2
您可以使用:

df.loc[df['station'] == "station_1"] = df.loc[df['station'] == "station_1"].fillna(df.loc[df['station'] == "station_2"])
用桩号1的NaN值替换桩号2的等效值。我所说的“等价”是指“月”指数中的匹配

输出:

              station   values
    month       
    Jan       station_1    3.2
    Feb       station_1    5.8
    Mar       station_1    4.1
    Jan       station_2    3.6
    Feb       station_2    5.8
    Mar       station_2    4.2

从科学的角度来看,你不认为调整附近站点的值会引入统计偏差吗?或者问另一个问题:为什么将缺失的值保留为NaN不是一个选项?关于统计偏差,你肯定是对的。但问题是,我正在将这些数据输入不同的疾病模拟模型,其中一些模型无法处理超过一小时的间隙,只能停止运行。因此,引入偏差问题较少。此外,我还有两个气象站位于同一位置的位置,还有额外的算法生成的数据,这些数据可以或多或少地作为可靠的备份。从科学的角度来看,你不认为调整附近站的值会引入统计偏差吗?或者问另一个问题:为什么将缺失的值保留为NaN不是一个选项?关于统计偏差,你肯定是对的。但问题是,我正在将这些数据输入不同的疾病模拟模型,其中一些模型无法处理超过一小时的间隙,只能停止运行。因此,引入偏差问题较少。此外,我还有两个气象站在同一位置的位置,还有额外的算法生成的数据,可以作为或多或少的可靠备份。非常感谢。目前,所有不同的位置都在同一个csv/数据帧中。但如果没有其他选择,分裂就不会成为问题。当前索引是datetime\u location。如果我为每个位置创建一个dataframe,其中datetime是索引,并在替换缺少的数据后插入location列,那么您的解决方案就会起作用。无论如何,如果有人想出了一个方法,使它在合并的数据框架内工作,我会更喜欢。啊,好吧,我相信我理解。在这种情况下,您可以用一列中的NaN值替换另一列中的值,如下所示:df.column_with_nans.fillna(df.column_second_station,inplace=True),其中,正如名称所说,“column_with_nans”是缺少值的列的名称,“column_second_station”是包含附近站点值的列。不抱歉,可能我解释错了。正如您在我的示例dataframe中看到的。日期时间、位置、温度、湿度……在不同的列中,不同位置的时间序列在不同的行中。是的,你完全正确,我编辑了我的答案,因此没有必要使用(有点长的)单行线创建新的数据帧,现在让我知道它是否有意义。很抱歉,答复太晚了……我无法更早地到达它。是的,它似乎工作得很好。非常感谢你!非常感谢你。目前,所有不同的位置都在同一个csv/数据帧中。但如果没有其他选择,分裂就不会成为问题。当前索引是datetime\u location。如果我为每个位置创建一个dataframe,其中datetime是索引,并在替换缺少的数据后插入location列,那么您的解决方案就会起作用。无论如何,如果有人想出了一个方法,使它在合并的数据框架内工作,我会更喜欢。啊,好吧,我相信我理解。在这种情况下,您可以用一列中的NaN值替换另一列中的值,如下所示:df.column_with_nans.fillna(df.column_second_station,inplace=True),其中,正如名称所说,“column_with_nans”是缺少值的列的名称,“column_second_station”是包含附近站点值的列。不抱歉,可能我解释错了。正如您在我的示例dataframe中看到的。日期时间、位置、温度、湿度……在不同的列中,不同位置的时间序列在不同的行中。是的,你完全正确,我编辑了我的答案,因此没有必要使用(有点长的)单行线创建新的数据帧,现在让我知道它是否有意义。很抱歉,答复太晚了……我无法更早地到达它。是的,它似乎工作得很好。非常感谢你!