Pandas.DataFrame处理异常值的方法

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)

参考:

Pandas – DataFrame.fillna() 替换DataFrame中的空值|极客教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值