【发布时间】:2020-02-03 23:10:10
【问题描述】:
我有一个看起来像这样的数据框:
+---------+---------+
| Value A | Value B |
+---------+---------+
| 10 | 1 |
| 20 | 2 |
| 30 | 3 |
| 40 | 4 |
| 50 | 5 |
| 60 | NaN |
| 70 | NaN |
| 80 | NaN |
| 90 | NaN |
| 100 | NaN |
+---------+---------+
我想用以前的值填充这些缺失的值,但如下所示。
+---------+---------+
| Value A | Value B |
+---------+---------+
| 10 | 1 |
| 20 | 1 |
| 30 | 2 |
| 40 | 2 |
| 50 | 3 |
| 60 | 3 |
| 70 | 4 |
| 80 | 4 |
| 90 | 5 |
| 100 | 5 |
+---------+---------+
问题是这些缺失值可能在任一列中。我试图手动完成,但这需要很多时间。填充值也取决于 A 列的len()。我的方法是这样的:
missing_data_len = len(valueA)-len(valueB)
df['ValueB'].shift(missing_data_len)
然后使用ffill 填写NaN 值。但结果并不准确。有没有更好的方法来解决这个问题。
【问题讨论】:
-
df['ValueB'].shift(missing_data_len)立即成为一个问题。这不起作用,所以它只是被扔掉了 -
"但移动如下所示。"。您显示的不是
shift。 Shift 只是移动值,而不是用值替换NaN。为什么20现在应该有1的对应值,而之前是2? -
听起来你的 NaN 没有一致性,所以对于如何填充它们没有通用规则,那么你希望 python 如何填充它们?
-
@Aryerez 我们知道两列的 len 如果我们将 B 列中的最后一个值移动 diff_len-1 ,然后对剩余的值也这样做。然后使用 ffill 或 bfill 填充 NaN。
-
@roganjosh 我刚刚尝试过,我知道这是错误的,但我想知道我想做什么。可能有更好的方法,一种有效的方法。 “为什么现在 20 应该有……?”因为它应该像这个原始数据框有错误的映射
标签: python pandas dataframe nan missing-data