当前位置: 首页 > article >正文

dataframe能否把列表里所有的NaN换成列表上一位的数字?

在 Pandas 中,可以使用 fillna(method='ffill') 方法将 DataFrame 中的 NaN 替换为前一个有效值(即 前向填充)。以下是具体实现方法:


基础实现

import pandas as pd
import numpy as np

# 示例 DataFrame
df = pd.DataFrame({
    "列名1": [1, np.nan, np.nan, 4],
    "列名2": [np.nan, 2, np.nan, 5]
})

# 前向填充所有 NaN
df_filled = df.fillna(method='ffill')  # method='ffill' 表示用前一个有效值填充

print("原始数据:\n", df)
print("\n填充后:\n", df_filled)

输出结果

原始数据:
    列名1  列名2
0   1.0  NaN
1   NaN  2.0
2   NaN  NaN
3   4.0  5.0

填充后:
    列名1  列名2
0   1.0  NaN  # 第一个 NaN 无法填充(前面没有值)
1   1.0  2.0
2   1.0  2.0  # 继承前一个有效值
3   4.0  5.0

进阶用法

1. 限定填充方向(行/列)

默认按列方向填充 (axis=0),也可按行填充 (axis=1):

# 按行前向填充(横向填充)
df_filled_row = df.fillna(method='ffill', axis=1)
2. 结合后向填充

若需要同时填充首部的 NaN,可以组合使用 bfill(后向填充):

# 先前向填充,再后向填充
df_filled = df.fillna(method='ffill').fillna(method='bfill')
3. 限定填充步数

通过 limit 参数限制连续填充的最大次数:

# 每个 NaN 最多被填充一次(仅填充紧跟其后的一个 NaN)
df_limited = df.fillna(method='ffill', limit=1)

完整代码示例

import pandas as pd
import numpy as np

# 创建含 NaN 的 DataFrame
data = {
    "A": [1, np.nan, np.nan, 4, np.nan],
    "B": [np.nan, 2, np.nan, 5, 6]
}
df = pd.DataFrame(data)

# 前向填充所有列
df_filled = df.fillna(method='ffill')

# 显示结果
print("原始数据:\n", df)
print("\n前向填充后:\n", df_filled)

输出结果

原始数据:
      A    B
0  1.0  NaN
1  NaN  2.0
2  NaN  NaN
3  4.0  5.0
4  NaN  6.0

前向填充后:
      A    B
0  1.0  NaN  # B 列第一个 NaN 无法填充
1  1.0  2.0
2  1.0  2.0  # A 和 B 继承前值
3  4.0  5.0
4  4.0  6.0  # A 列继承前值 4

注意事项

  1. 首行 NaN 处理
    如果首行有 NaNffill 无法填充(前面没有数据),需结合 bfill 或手动处理。

  2. 原地修改
    若需直接修改原 DataFrame,使用 inplace=True(不推荐,建议赋值新变量):

    df.fillna(method='ffill', inplace=True)  # 直接修改原数据
    
  3. 性能优化
    对大型数据集,优先使用向量化操作(如 fillna),避免逐行循环。


总结

通过 df.fillna(method='ffill') 可以高效实现 用前一个有效值填充 NaN,适用于时间序列、传感器数据等场景。根据需求可调整 axislimit 等参数灵活控制填充逻辑。


http://www.kler.cn/a/574140.html

相关文章:

  • MR 2. 单细胞测序数据与孟德尔随机化分析揭示褪黑素在缺血性中风的靶点
  • flask实现mvc模式
  • 蓝桥杯题型
  • 蓝桥与力扣刷题(蓝桥 门牌制作)
  • Mayavi一个强大的python库
  • CS144 Lab Checkpoint 2: the TCP receiver
  • HCIE云计算学什么?怎么学?未来职业发展如何?
  • [QT]开发全解析:从概念到实战
  • Kafka - 高吞吐量的七项核心设计解析
  • Apache ECharts介绍(基于JavaScript开发的开源数据可视化库,用于创建交互式图表)
  • 计算机毕业设计SpringBoot+Vue.js多媒体素材库系统(源码+文档+PPT+讲解)
  • 使用 Python pandas操作 Excel 文件
  • 爬虫逆向:脱壳工具反射大师的使用详解
  • 集成的背景与LLM集成学习
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之功能优化,添加表格空状态提示
  • 2021年高教社杯全国大学生数学建模A题——基于几何模型的“FAST”主动反射面的形状调节
  • 【漫话机器学习系列】122.相关系数(Correlation Coefficient)
  • 海南自贸港的数字先锋:树莓集团的战略布局解析
  • 基于Hadoop的热门旅游景点推荐数据分析与可视化系统(基于Django大数据技术的热门旅游景点数据分析与可视化)
  • 【连珠云弈】网页五子棋版项目测试报告