df.fillna()
value : 填充静态的、字典的、数组的、系列的或DataFrame。
method : 如果用户没有传递任何值,则使用该方法。Pandas有不同的方法,如bfill、backfill或fill,分别在前向索引或前向/后向的位置上填入数值。
axis: axis对于行/列来说,需要输入int或string值。对于整数,输入可以是0或1;对于字符串,输入 “index “或 “columns”。
limit : 这是一个整数值,用于指定后续的前向/后向NaN值填充的最大数量。
downcast : 它需要一个dict,指定将什么d类型下移到什么类型。比如Float64到int64。
import numpy as np import pandas as pd df = pd.DataFrame(np.random.randn(6, 3)) df.loc[1: 2, 1] = np.nan df.loc[3, 2] = np.nan print(df) tmp_df = df.fillna(value=1, inplace=False, limit=1) # 按列填充nan为value值,limit限制每列值填充一个 print(tmp_df) tmp_df = df.fillna(inplace=False, method='ffill') # 按列使用前一个值填充 print(tmp_df) tmp_df = df.fillna(inplace=False, method='ffill', axis=1) # 按行使用前一个填充 print(tmp_df) df.fillna(inplace=True, method='bfill', axis=0) # 按列使用后一个值填充 print(df)
df.interpolate()
用于填补数据框架或系列中的缺失值,使用插值技术填补缺失值,而不是硬编码的值。
method : linear: 默认值,使用线性插值,根据最近的两个点确定直线推算中间缺少的值;time: 当数据索引是日期时;index: 使用索引的值进行插值;polynomial: 多项式插值,需指定 order 参数,例如 order=2 用于二次多项式插值;pad/ffil:用前一个非缺失值来填充 NaN;nearest:最近的非 NaN 值;quadratic & cubic:二次和三次插值,适用于非线性数据;barycentric:重心插值。它是根据给定值的重心来计算插值的;krogh:Krogh 插值;spline:样条插值,善于处理数据集中的异常值。
‘values’, ‘zero’, ‘slinear’, ‘barycentric’, ‘krogh’, ‘polynomial’, ‘piecewise_polynomial’, ‘from_derivatives’, ‘pchip’, ‘akima’
axis : 0逐列填充,1逐行填充。
limit : 填充连续NaN的最大数量。必须大于0。
limit_direction : {‘forward’, ‘backward’, ‘both’}, default ‘forward’ 。
limit_area : 决定哪些 NaN 值应被插值,NaN 值可能出现在序列的开始或结束位置的情况
None:默认值,所有的 NaN 都可以被插值,没有任何限制。
inside:仅插值 NaN 值,如果被有效的观测值(非 NaN)包围,即如果一个 NaN 序列的前后都有非 NaN 的值,则这个 NaN 序列可以被插值,同时序列开头和结尾的连续 NaN 值不会被插值。
outside:仅插值开头或结尾的 NaN 值,中间的 NaN 序列,只要被非 NaN 值包围则不会被插值。
downcast :如果可能的话,将dtypes降级。
import pandas as pd df = pd.DataFrame({"A": [12, 4, 5, None, 1], "B": [None, 2, 54, 3, None], "C": [20, 16, None, 3, 8], "D": [14, 3, None, None, 6]}) print(df) print("=" * 30) tmp_df = df.interpolate(method='linear', limit_direction='forward', inplace=False) print(tmp_df) print('=' * 30) tmp_df = df.interpolate(method='linear', limit_direction='backward', limit=1, inplace=False) print(tmp_df)
参考: