Pandas 数据清洗:按列向上填充空值

本文将介绍一种使用 Python Pandas 库实现按列向上填充空值的方法,即 将 DataFrame 中每一列的空值,用该列下一个不为空的值填充。该方法适用于需要对 DataFrame 进行清洗,并确保每一列都具有连续数据的情况。

代码实现

import pandas as pd
import numpy as np

def fillna_by_column(data):
    for col in data.columns:
        last_valid_val = None
        for i, val in enumerate(data[col]):
            if pd.isna(val):
                if last_valid_val is not None:
                    data.iloc[i, data.columns.get_loc(col)] = last_valid_val
                else:
                    break
            else:
                last_valid_val = val
    return data

函数解析

该函数接受一个 pd.DataFrame 类型的 data 作为输入,并返回一个经过处理的 DataFrame。其具体实现如下:

  1. 遍历每一列: 使用 for col in data.columns: 循环遍历 DataFrame 的每一列。
  2. 记录最近有效值: 使用 last_valid_val 变量记录该列最近遇到的非空值。初始值为 None。
  3. 遍历每一行: 使用 for i, val in enumerate(data[col]): 循环遍历每一列的每个元素。
  4. 判断是否为空值: 使用 if pd.isna(val): 判断当前元素是否为空值。
  5. 填充空值: 如果是空值,且 last_valid_val 不为空,则将 last_valid_val 填充到当前元素位置。如果 last_valid_val 为空,则说明该列后续不再有非空值,使用 break 跳出该列循环。
  6. 更新最近有效值: 如果当前元素不为空,则更新 last_valid_val 为当前元素的值。
  7. 返回处理后的 DataFrame: 函数最终返回处理后的 DataFrame。

使用方法

# 创建示例 DataFrame
data = pd.DataFrame({'A': [1, None, 3, None], 'B': [None, 2, None, 4]})

# 使用 fillna_by_column 函数填充空值
data = fillna_by_column(data)

# 打印结果
print(data)

输出结果:

   A  B
0  1  2
1  1  2
2  3  4
3  3  4

总结

该函数利用 Python Pandas 库提供的灵活功能,实现了按列向上填充空值的操作。该方法简单易懂,并能有效处理一些实际数据清洗场景。需要注意的是,该方法只适用于对每一列进行连续填充的情况。在实际使用中,需要根据具体场景选择合适的数据清洗方法。

Pandas 数据清洗:按列向上填充空值

原文地址: https://www.cveoy.top/t/topic/nDy8 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录