One - One Code All

Blog Content

pandas中dataframe缺失值处理dropna和fillna,删除带有NAN的行或列

Python 统计学-科学计算   2014-06-05 20:51:48

pandas中dataframe缺失值处理dropna和fillna,删除带有NAN的行或列


DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)


功能:使用指定的方法填充NA / NaN值

一定要将inplace = True加入参数,才能让源数据发生改变并保存。

df.fillna(0, inplace = True)


参数:value : 变量, 字典, Series, or DataFrame 

用于填充缺失值(例如0),或者指定为每个索引(对于Series)或列(对于DataFrame)使用哪个字典/Serise/DataFrame的值。(不在字典/Series/DataFrame中的值不会被填充)这个值不能是一个列表。


method : {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, 默认值 None ; 在Series中使用方法填充空白(‘backfill’, ‘bfill’向前填充,‘pad’, ‘ffill’向后填充)


axis : {0 or ‘index’, 1 or ‘columns’}


inplace : boolean, 默认值 False。如果为Ture,在原地填满。注意:这将修改次对象上的任何其他视图(例如,DataFrame中的列的无复制贴片)


limit : int, 默认值 None; 如果指定了方法,则这是连续的NaN值的前向/后向填充的最大数量。 换句话说,如果连续NaN数量超过这个数字,它将只被部分填充。 如果未指定方法,则这是沿着整个轴的最大数量,其中NaN将被填充。 如果不是无,则必须大于0。


downcast : dict, 默认是 None; 如果可能的话,把 item->dtype 的字典将尝试向下转换为适当的相等类型的字符串(例如,如果可能的话,从float64到int64)


返回:被充满的DataFrame 


dropna( )

对于Serial对象

丢弃带有NAN的所有项


data=pd.Series([1,np.nan,5,np.nan])

data

0    1.0

1    NaN

2    5.0

3    NaN

dtype: float64


data.dropna()

0    1.0

2    5.0

dtype: float64


对于DataFrame对象

丢弃带有NAN的行


data=pd.DataFrame([[1,5,9,np.nan],[np.nan,3,7,np.nan],[6,np.nan,2,np.nan]

    ...: ,[np.nan,np.nan,np.nan,np.nan],[1,2,3,np.nan]])


data

    0    1    2   3

0  1.0  5.0  9.0 NaN

1  NaN  3.0  7.0 NaN

2  6.0  NaN  2.0 NaN

3  NaN  NaN  NaN NaN

4  1.0  2.0  3.0 NaN


data.dropna()

Empty DataFrame

Columns: [0, 1, 2, 3]

Index: []


丢弃所有元素都是NAN的行


data.dropna(how='all')

     0    1    2   3

0  1.0  5.0  9.0 NaN

1  NaN  3.0  7.0 NaN

2  6.0  NaN  2.0 NaN

4  1.0  2.0  3.0 NaN


丢弃所有元素都是NAN的列

data.dropna(axis=1,how='all')

     0    1    2

0  1.0  5.0  9.0

1  NaN  3.0  7.0

2  6.0  NaN  2.0

3  NaN  NaN  NaN

4  1.0  2.0  3.0


只保留至少有3个非NAN值的行


data.dropna(thresh=3)

     0    1    2   3

0  1.0  5.0  9.0 NaN

4  1.0  2.0  3.0 NaN


fillna( )

以常数替换NAN值

data.fillna(0)

     0    1    2    3

0  1.0  5.0  9.0  0.0

1  0.0  3.0  7.0  0.0

2  6.0  0.0  2.0  0.0

3  0.0  0.0  0.0  0.0

4  1.0  2.0  3.0  0.0


后向填充


data.fillna(method='ffill')

     0    1    2   3

0  1.0  5.0  9.0 NaN

1  1.0  3.0  7.0 NaN

2  6.0  3.0  2.0 NaN

3  6.0  3.0  2.0 NaN

4  1.0  2.0  3.0 NaN


后项填充且可以连续填充的最大数量为1

data.fillna(method='ffill',limit=1)

     0    1    2   3

0  1.0  5.0  9.0 NaN

1  1.0  3.0  7.0 NaN

2  6.0  3.0  2.0 NaN

3  6.0  NaN  2.0 NaN

4  1.0  2.0  3.0 NaN


只替换第一个NAN值

df.fillna(value=values, limit=1)


方法说明

dropna:对缺失的数据进行过滤

fillna:用指定值或插值的方法填充缺失数据

isnull:判断数据是否缺失

not null:isnull的否定式


parameters详解

axis:default 0指行,1为列

how:{‘any’, ‘all’}, default ‘any’指带缺失值的所有行;'all’指清除全是缺失值的行

thresh:int,保留含有int个非空值的行

subset:对特定的列进行缺失值删除处理

inplace: 这个很常见,True表示就地更改

 



上一篇:pandas中dataframe过滤列str.contain出现ValueError: cannot index with vector containing NA/NaN values错误的解决方法
下一篇:pandas.DataFrame通过取反删除或选取含有特定数值的行或列

The minute you think of giving up, think of the reason why you held on so long.