python数据清洗

1.处理缺失值

string_data=pd.Series(['aardvark','artichoke',np.nan,'avocado'])
string_data.isnull()

NA 处理方法

dropna过滤na
fillna填充na,比如ffill,bfill
isnull返回表明哪些值是缺失值的布尔值
notnullisnull的反函数

1.1过滤缺失值

data=pd.DataFrame([[1.,6.5,3.],[1.,NA,NA],[NA,NA,NA],[1.,NA,NA]])

cleaned=data.dropna() #删除包含有na的行

cleaned=data.dropna(how='all') #删除所有值均为na的行

cleaned=data.dropna(axis=1,how='all') #删除所有值均为na的列

cleaned=data.dropna(how='any') #删除含有na的行

cleaned=data.dropna(axis=1,how='any') #删除含有na的列

1.2补全缺失值

#create data
df=pd.DataFrame(np.random.randn(7,3))
df.iloc[:4,1]=NA

#fill data
df.fillna(0) #用0来补全缺失值

df.fillna({1:0.5,2:0}) #用字典,可以为不同列设定不同的填充值

df.fillna({1:0.5,2:0},inplace=True) #fillna返回的是一个新的对象,加上inplace=True可以修改已经存在的对象

df.fillna(method='ffill') #向前填充

df.fillna(method='bfill') #向后填充

2.数据转换

2.1删除重复值

2.2使用函数或映射进行数据转换

#create data
data=pd.DataFrame({'food':['bacon','pulled pork','bacon','Pastrami','Corned beef','bacon','pastrami','honey ham','nova lox'],'ounces':[4,3,12,6,7.5,8,3,5,6]})

meat_to_animal={'bacon':'pig','pulled pork':'pig','pastrami':'cow','corned beef':'cow','honey ham':'pig'} #这个字典里全是小写,data里面有些是大写,因此我们需要用str.lower方法把每个值都换成小写

lowered=data['food'].str.lower()

#map
data['animal']=lowered.map(meat_to_animal)

2.3替代值

data=pd.Series([1.,-999.,2.,-999.,-1000.,3.])
data.replace(-999,np.nan)

数据清洗的过程中,很多时候还有?¥等等符号作为乱码,pandas只有处理na的方法,因此可以用replace()将这些符号转换成na(np.nan)

data['horsepower']=data['horsepower'].apply(lambda x: x.replace('?', '0')).astype('float64')

清洗处理好数据之后,希望能替换掉原来的csv文件,这里可以用to_csv

data.to_csv('auto-mpg.csv', encoding='utf-8')

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值