首页 > 解决方案 > 移动特定行以更正 Pandas 数据框中的缺失值

问题描述

Python初学者在这里。

我找不到类似的东西,但我觉得它不应该那么难。

我有一个大的 Excel 表,其中包含来自不同传感器的值,但由于测量错误,一些值丢失了。因此,当我将所有内容都放入 pandas 数据框中时,我会得到这样的结果:

时间戳1 传感器1 时间戳2 传感器2
08:00 100 08:00 60
08:05 102 08:10 40
08:10 105 08:15 50
08:15 101 08:25 31
08:20 103 钠盐
08:25 104 钠盐

真实数据帧有 7 个传感器和超过 100k 行,因此不同列中有不同数量的 NaT 和 NaN。

我需要对齐每个传感器的时间戳,以避免一些不一致。因此,我想将 TimeStamp2 和 Sensor2 中的线从与 TimeStamp1 不同的点移开,在 Sensor2 的位置添加缺失的时间和 NaN(或空)值,并使最后的 NaT 和 NaN 从两者中消失列。

像这样的输出:

时间戳1 传感器1 时间戳2 传感器2
08:00 100 08:00 60
08:05 102 08:05 空 (NaN)
08:10 105 08:10 40
08:15 101 08:15 50
08:20 103 08:20 空 (NaN)
08:25 104 08:25 31

我想我可以通过询问一种在特定列的特定行中插入特定元素的方法来简化问题。我见过的所有移动示​​例都会将整列向上或向下移动。是否有捷径可寻?

如果它更容易,这个解决方案也适用于我:

时间戳 传感器1 传感器2
08:00 100 60
08:05 102 空 (NaN)
08:10 105 40
08:15 101 50
08:20 103 空 (NaN)
08:25 104 31

标签: pythonpandasdataframe

解决方案


@ti7 的建议是正确的;将数据帧拆分为单独的帧,合并和填充:

sensor1 = df.filter(like='1')
sensor2 = df.filter(like='2')
(sensor1.merge(sensor2, 
               how = 'outer', 
               left_on='TimeStamp1', 
               right_on = 'TimeStamp2', 
               sort = True)
        .fillna({"TimeStamp2" : df.TimeStamp1})
        .dropna(subset=['TimeStamp1'])
) 
  TimeStamp1  Sensor1 TimeStamp2  Sensor2
0      08:00    100.0      08:00     60.0
1      08:05    102.0      08:05      NaN
2      08:10    105.0      08:10     40.0
3      08:15    101.0      08:15     50.0
4      08:20    103.0      08:20      NaN
5      08:25    104.0      08:25     31.0

推荐阅读