详解Pandas 处理缺失值指令大全
前言
运用pandas库对所得到的数据进行数据清洗,复习一下相关的知识。
1数据清洗
1.1处理缺失数据
对于数值型数据,分为缺失值(NAN)和非缺失值,对于缺失值的检测,可以通过Python中pandas库的Series类对象的isnull方法进行检测。
importpandasaspd importnumpyasnp string_data=pd.Series(['Benzema','Messi',np.nan,'Ronaldo']) string_data.isnull()
对于缺失值,除了np.nan来表示,还可以用None来表示缺失值
string_data=None
1.2滤除掉缺失数据
1.2.1对于Series
使用dropna方法将NAN的数据过滤掉。
fromnumpyimportnanasNA importpandasaspd data=pd.Series([1,NA,4.5,NA,5]) data.dropna()
另一种方法是使用布尔值索引对NAN数据进行过滤:
data[data.notnull()]
1.2.2对于DataFrame
dropna()方法对于DataFrame的数据来说,会将含有NAN数据的行全部扔掉。
data=pd.DataFrame([[1.,6.5,3.],[1.,NA,NA], [NA,NA,NA],[NA,6.5,3.]]) data data.dropna()
如果只想删除掉那些行中全部为NAN数据的DataFrame,通过设置dropna()方法中的参数how即可。
data.dropna(how='all')
如果操作对象变为列,代码如下:
data[4]=NA data data.dropna(axis=1,how='all')
如果想留下其中的一部分数据,则可以设置thresh参数:
df=pd.DataFrame(np.random.randn(7,3)) df.iloc[:4,1]=NA df.iloc[:2,2]=NA df df.dropna(thresh=2)
thresh=n,参数n相当于保留至少含有n个非NA的行
1.3填充缺失数据
fillna(n),n替换掉NA
df=pd.DataFrame(np.random.randn(7,3)) df.fillna(0)
如果填充格式是字典,fillna({0:n1,1:n2}),将列0的NA填充为n1,将列1的NA填充为n2。
df.fillna({{1:0.2,2:0.3}})
直接填充df的NA值,直接改变df,不需要命名新的变量。
df.fillna(0,inplace=True)
2数据转换
2.1移除重复数据
data=pd.DataFrame({'k1':['one','two']*3+['two'], 'k2':[1,1,2,3,3,4,4]}) data.duplicated()
返回的是每一行的重复结果,不重复是False,重复是True。
如果要去除重复的行,代码如下:
data.drop_duplicates()
如果操作对象为列,在duplicated方法中指定参数即可。
data['k3']=range(7) data.duplicated(['k1'])
返回的是k1列中重复的元素。
对于drop_duplicates()方法来说,去除掉的是重复数据的后者。比如说序号为0,1的数据重复,方法删除掉index=1的行。如果想要删除前者,只需要指定参数last即可:
data.drop_duplicates(['k1'],keep='last')
2.2与映射相结合
map函数的使用方法
list(map(lambdax:2*x,range(10)))
2.3替换
使用的是replace方法,replace有两个参数,前者是被替换的数,后者是替换的数,参数格式可以是列表,也可以是字典
data=pd.Series([1.,-999.,2.,-999.,-1000.,3.]) data.replace(-999.0,np.nan)#替换单个值 data.replace([-999.0,-1000.0],np.nan)#用一个值替换多个值 data.replace([-999.0,-1000.0],[np.nan,0])#用不同值替换不同值 data.replace({-999.0:0,-1000.0:np.nan})#格式为字典
2.4创建数据的修改版
rename方法可以创建数据的修改版,而不必在原数据上进行修改。
data.rename(index=str.title,columns=str.upper)
还可以使用字典的格式,对index,columns进行改变。
data.rename(index={'OHIO':'INDIANA'},columns={'three':'peekaboo'})
这样的重命名并不对原数据进行修改,如果想要直接改变data,如上,参数inplace=True即可。
data.rename(index={'OHIO':'INDIANA'},columns={'three':'peekaboo'},inplace=True) data
这样就改变了data。
2.5计算指标\哑变量
用于机器学习中,对定类数据的转化,用于将df中的object对象转化为One-hot编码,消除了数字间的比较大小问题。
df=pd.DataFrame({'key':['b','b','a','c','a','b'], 'data1':range(6)}) pd.get_dummies(df['key'])#分解了key列,分开了三个属性
如果想在分开的属性前面加上前缀的话,设定prefix参数即可实现该功能,可以将其与原始数据合并在一起。
dummies=pd.get_dummies(df['key'],prefix='key') df_with_dummies=df['data1'].join(dummies) df_with_dummies
到此这篇关于详解Pandas处理缺失值指令大全的文章就介绍到这了,更多相关Pandas处理缺失值内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!