将pd类型的data中遍历data的每一列遍历每一行如果元素为空值则将所有空值由该列下一个不为空的值按列向上填补如果该列已没有不为空的值则跳出该列循环
以下是一个可能的实现:
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类型的data,遍历其中的每一列和每一行,如果元素是空值,则将该列下一个不为空的值按列向上填补。如果该列已经没有不为空的值,则跳出该列循环。最后将填补后的data返回。
该函数的具体实现如下:
-
首先,我们使用for循环遍历data的每一列,对于每一列,我们使用last_valid_val变量来存储该列中最近的非空值。
-
然后,我们再次使用for循环遍历该列中的每一个元素。如果该元素是空值,则将该列下一个不为空的值按列向上填补。具体来说,我们使用if语句判断该元素是否为空值。如果是空值,则使用last_valid_val变量来填补该空值。如果last_valid_val为None,则说明该列已经没有不为空的值,我们使用break语句跳出该列循环。
-
如果该元素不是空值,则更新last_valid_val变量为该元素的值。
-
最后,我们将填补后的data返回。
需要注意的是,该函数使用了pd.isna()函数来判断元素是否为空值,使用了data.iloc[i, data.columns.get_loc(col)]来访问data中的元素
原文地址: http://www.cveoy.top/t/topic/dgzz 著作权归作者所有。请勿转载和采集!