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