dataframe iloc_数据分析-pandas之dataframe缺失数据处理

1.缺失数据情况:一种为nan,一种为0

3a500c567a77c1d21c622031bee1bc69.png

2缺失数据处理

3bca6ad1d7f552245d2d618146e4b1e3.png

2-1pd.isnull(df)可以找出值为nan数据,同理notnull找出不是nan的数据

import pandas as pdimport numpy as npt1=pd.DataFrame(np.arange(12).reshape((3,4)))#将(1,1)与(2,1)位置数据设置为nant1.iloc[[1,2],[1]]=np.nanprint(t1)print("*"*50)#判断数据是否是nana=pd.isnull(t1)print(a)print("*"*50)

运行结果:

D:pythonpython.exe F:/data_analysis/pandas9_dataframe_lack_data.py   0    1   2   30  0  1.0   2   31  4  NaN   6   72  8  NaN  10  11**************************************************       0      1      2      30  False  False  False  False1  False   True  False  False2  False   True  False  False**************************************************进程已结束,退出代码 0

2-1打印出列不含nan所在行的数据

import pandas as pdimport numpy as npt1=pd.DataFrame(np.arange(12).reshape((3,4)))#将(1,1)与(2,1)位置数据设置为nant1.iloc[[1,2],[1]]=np.nanprint(t1)print("*"*50)#判断数据是否是nana=pd.isnull(t1)print(a)print("*"*50)#显示第2列中非nan的行数据-布尔索引print(t1[pd.notnull(t1[1])])print("*"*50)

运行结果:

D:pythonpython.exe F:/data_analysis/pandas9_dataframe_lack_data.py   0    1   2   30  0  1.0   2   31  4  NaN   6   72  8  NaN  10  11**************************************************       0      1      2      30  False  False  False  False1  False   True  False  False2  False   True  False  False**************************************************   0    1  2  30  0  1.0  2  3**************************************************进程已结束,退出代码 0

2-3删除nan所在行列的数据,how默认的是any,any表示不全为nan的那一行/列删除,当为all的话,只删除全为nan的行/列。inplace替换的意思,为False时,不保留当前修改后的df,当为True时,保留修改后的df。

import pandas as pdimport numpy as npt1=pd.DataFrame(np.arange(12).reshape((3,4)))#将(1,1)与(2,1)位置数据设置为nant1.iloc[[1,2],[1]]=np.nanprint(t1)print("*"*50)#判断数据是否是nan# a=pd.isnull(t1)# print(a)# print("*"*50)#显示第2列中非nan的行数据-布尔索引# print(t1[pd.notnull(t1[1])])# print("*"*50)#删除nan所在的行,想删除列的话,把axis的值调为1print(t1.dropna(axis=0))print("*"*50)

运行结果:

D:pythonpython.exe F:/data_analysis/pandas9_dataframe_lack_data.py   0    1   2   30  0  1.0   2   31  4  NaN   6   72  8  NaN  10  11**************************************************   0    1  2  30  0  1.0  2  3**************************************************进程已结束,退出代码 0

2-4替换nan,pd.fillna(10),将所有nan的值替换成10,但这样没有意义,pd.fillna(df.mean())把每列的nan填充为所在列的均值。如果想替换某一列的nan,也可以用df[""]pd.fillna()

2-4-1替换nan的值为10

import pandas as pdimport numpy as npt1=pd.DataFrame(np.arange(12).reshape((3,4)))#将(1,1)与(2,1)位置数据设置为nant1.iloc[[1,2],[1]]=np.nanprint(t1)print("*"*50)#替换nan的值为10print(t1.fillna(10))print("*"*50)

运行结果:

D:pythonpython.exe F:/data_analysis/test.py   0    1   2   30  0  1.0   2   31  4  NaN   6   72  8  NaN  10  11**************************************************   0     1   2   30  0   1.0   2   31  4  10.0   6   72  8  10.0  10  11**************************************************进程已结束,退出代码 0

2-4-2替换nan的值为均值

import pandas as pdimport numpy as npt1=pd.DataFrame(np.arange(12).reshape((3,4)))#将(1,1)与(2,1)位置数据设置为nant1.iloc[[1,2],[1]]=np.nanprint(t1)print("*"*50)#替换nan的值为10print(t1.fillna(10))print("*"*50)#替换nan的值为均值print(t1.fillna(t1.mean()))

运行结果:

D:pythonpython.exe F:/data_analysis/test.py   0    1   2   30  0  1.0   2   31  4  NaN   6   72  8  NaN  10  11**************************************************   0     1   2   30  0   1.0   2   31  4  10.0   6   72  8  10.0  10  11**************************************************   0    1   2   30  0  1.0   2   31  4  1.0   6   72  8  1.0  10  11进程已结束,退出代码 0

2-4-3把某一列含nan的替换成均值,含有nan的列df.mean()方法比series里方法求平均值简单多了,直接调用mean方法即可,nan是不参与运算的

import pandas as pdimport numpy as npt1=pd.DataFrame(np.arange(12).reshape((3,4)))#将(1,1)与(2,1)位置数据设置为nant1.iloc[[1],[1,2]]=np.nanprint(t1)print("*"*50)#替换nan的值为10print(t1.fillna(10))print("*"*50)#替换nan的值为均值#print(t1.fillna(t1.mean()))#替换第2列nan的值为均值print(t1.iloc[:,1].fillna(t1.mean()))

运行结果:

D:pythonpython.exe F:/data_analysis/test.py   0    1     2   30  0  1.0   2.0   31  4  NaN   NaN   72  8  9.0  10.0  11**************************************************   0     1     2   30  0   1.0   2.0   31  4  10.0  10.0   72  8   9.0  10.0  11**************************************************0    1.01    5.02    9.0Name: 1, dtype: float64进程已结束,退出代码 0

2-5对于值为0的情况,可以先将其转换为nan,对nan的处理方式如上所示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值