python - 用下一次出现的非 np.nan 值的值填充 np.nan 值
问题描述
我试图弄清楚如何在特定条件下替换所有 nan 值。如果值是 nan,我希望将其替换为特定列表中右侧的日期。如果 nan 值右侧没有日期值,我想保持原样。
这是我的起始数据框。
mydf = [['2019-01-30', nan, nan, nan, '2020-03-09'],
['2018-11-29', nan, '2019-06-24', '2019-12-18', '2020-02-11'],
[nan, nan, '2020-02-25', nan, nan]]
我希望这最终看起来像这样。
mydf = [['2019-01-30', '2020-03-09', '2020-03-09', '2020-03-09', '2020-03-09'],
['2018-11-29', '2019-06-24', '2019-06-24', '2019-12-18', '2020-02-11'],
['2020-02-25', '2020-02-25', '2020-02-25', nan, nan]]
这是我目前的尝试:
for i in range(0,len(mydf)):
for j, k in enumerate(mydf[i]):
if k is np.nan:
mydf[i][j] = mydf[i][j+1]
mydf
但我收到一个错误。一旦列表中的剩余值全部为 nan,我似乎无法弄清楚如何在每个列表中停止循环。
IndexError Traceback (most recent call last)
<ipython-input-247-3f0a1ce84ea0> in <module>
2 for j, k in enumerate(mydf[i]):
3 if k is np.nan:
----> 4 mydf[i][j] = mydf[i][j+1]
5
6 mydf
IndexError: list index out of range
mydf
[['2020-02-25', '2020-02-25', '2020-02-25', nan, nan],
['2018-11-29', nan, '2019-06-24', '2019-12-18', '2020-02-11'],
['2019-01-30', nan, nan, nan, '2020-03-09']]
解决方案
您可以根据需要进行操作。
mydf.fillna(method='ffill')
mydf.fillna(method='bfill')
这里不需要循环。
推荐阅读
- android - 如何从字符串中分离电子邮件和电话号码
- bash - 后缀删除在 shell 脚本中不起作用
- ethereum - 以太坊随机数管理。错误随机数太低
- mysql - MySQL - 根据先前的序列选择序列中的下一个项目
- javascript - jQuery 对话框 - X 按钮未显示
- node.js - 使用 multer 和 express 和 typescript
- python - 无法在 django 中使用 facebook 登录
- python - rabbitmq, python - ack 消费者程序示例
- python - 如何使用 pandas 进行条件聚合
- selenium - 使用 WebDriver 运行代码接收时出现错误“[PHPUnit\Framework\Exception] Undefined index: ELEMENT”