python - 移动特定行以更正 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 |
解决方案
@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
推荐阅读
- python - Python Pandas writer.save() 编码错误 - UnicodeDecodeError: 'ascii' codec can't decode byte 0x81
- symfony - console:doctrine:import with filter 在另一个表上返回错误
- mysql - mysql工作台上的复合主键
- regex - 正则表达式在回车后匹配数字,中间有文本
- python - 在特定时间运行 Chained Celery 任务
- python-3.x - 如何使用存储在 csv 中的情绪分析数据的 Pandas 绘制多条折线图
- python - 内部列表每个位置的字符频率
- sparql - DBpedia 所需的 SPARQL 查询帮助所有编程语言详细信息
- javascript - 道具更改后 axios.get 调用时将更新的状态传递给孩子
- c# - 如何绑定到 WPF 中用户控件内的控件?