基于Pandas数据清洗

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值