1. 数据清洗原因
数据的缺失、重复、异常值是无用的,处理这些数据可以使数据分析更加准确。
2. 处理丢失数据
2.1 对空值过滤(删除)
df.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
axis = 0时表示对行处理,1表示列
how = "all" 全部是NA才删,"any"只要有NA就删除
2.2 对缺失值覆盖
df.fillna(value/method)
用实数或源数据的数据填充
2.3 实例
import pandas as pd
from pandas import DataFrame,Series
import numpy as np
#随机生成一组数据
df = DataFrame(data = np.random.randint(0,100,size=(8,6)))
df.iloc[2,3] = None
df.iloc[4,4] = None
#检查数据是否含有空值
print df.isnull()
#删除含缺失值的列
df.dropna(axis=0)
#用实数0填充na,并替换原始df
df.fillna(0, inplace = True)
3. 处理重复数据
df.duplicated() :判断各行是重复,False为非重复值。
df.drop_duplicates():删除重复行
import pandas as pd
from pandas import DataFrame,Series
import numpy as np
#随机生成一组数据
df = DataFrame(data = np.random.randint(0,100,size=(8,4)))
df.iloc[2] = [0,0,0,0]
df.iloc[4] = [0,0,0,0]
#判断各行是重复
print df.duplicated()
#删除重复行
df.drop_duplicates()
4. 处理异常数据
判定异常值条件,再根据条件处理
import pandas as pd
from pandas import DataFrame,Series
import numpy as np
#自定一个1000行3列(A,B,C)取值范围为0-1的数,将C列的值大于其两倍标准差的异常值清洗
df = DataFrame(data = np.random.randint(size=(1000,3)),columns=['A','B','C'])
#判断异常值条件
twice_std=df['C'].std()*2
df.loc[~(df['C']>twice_std)]
5. 总结
df.duplicated() :判断各行是重复,False为非重复值。
df.drop_duplicates():删除重复行
df.fillna(0):用实数0填充na
df.dropna():按行删除缺失数据,使用参数axis=0;按列删除缺失值,使用参数axis=1,how = "all" 全部是NA才删,"any"只要有NA就删除
del df['col1']:直接删除某列
df.drop([]'col1',……],axis=1):删除指定列,也可以删除指定行
df.rename(index={'row1':'A'},columns ={'col1':'B'}):重命名索引名和列名
df.replace():替换df值,前后值可以用字典表,{'1':'A','2:'B'}
hr_data['col1'].map(function):Series.map,对指定列进行函数转换
pd.merge(df1,df2,on='col1',how='inner',sort=True):合并两个df,按照共有的列作内连接(交集),outter为外连接(并集),结果排序。
pd.concat([df1,df2]):多个Series堆叠成多行。
df1.combine_first(df2):用df2的数据补充df1的缺失值NAN。