Pandas 数据清洗:按列向上填充空值
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。其具体实现如下:
- 遍历每一列: 使用
for col in data.columns:循环遍历 DataFrame 的每一列。 - 记录最近有效值: 使用
last_valid_val变量记录该列最近遇到的非空值。初始值为 None。 - 遍历每一行: 使用
for i, val in enumerate(data[col]):循环遍历每一列的每个元素。 - 判断是否为空值: 使用
if pd.isna(val):判断当前元素是否为空值。 - 填充空值: 如果是空值,且
last_valid_val不为空,则将last_valid_val填充到当前元素位置。如果last_valid_val为空,则说明该列后续不再有非空值,使用break跳出该列循环。 - 更新最近有效值: 如果当前元素不为空,则更新
last_valid_val为当前元素的值。 - 返回处理后的 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 库提供的灵活功能,实现了按列向上填充空值的操作。该方法简单易懂,并能有效处理一些实际数据清洗场景。需要注意的是,该方法只适用于对每一列进行连续填充的情况。在实际使用中,需要根据具体场景选择合适的数据清洗方法。
原文地址: https://www.cveoy.top/t/topic/nDy8 著作权归作者所有。请勿转载和采集!