数据科学 第 3 章 5:缺失值处理、转换字符类型

第3章 5:缺失值
这次是用激励数据,没有获得激励的人,业绩和金额方有缺失值,以下为几种处理方法:

-- 发现缺失值:isnull/notnull
-- 处理缺失值:dropna/fillna

保存名称为:01 缺失值.py

import pymysql
import pandas as pd
from sqlalchemy import  create_engine

sql = "select * from jili"
engine = create_engine('mysql+pymysql://root:123456@192.168.200.200/xiaom')
df = pd.read_sql(sql,engine,)

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 42 entries, 0 to 41
Data columns (total 10 columns):
dep 42 non-null object #总共有42行
group 42 non-null object
name 42 non-null object
oldpro 26 non-null float64 #以下每列均有缺失值
newpro 33 non-null float64
oldrate 27 non-null float64
newrate 27 non-null float64
oldbones 24 non-null float64
newbones 26 non-null float64
allbones 27 non-null float64
dtypes: float64(7), object(3)
memory usage: 3.4+ KB

- 发现缺失值:

df.isnull返回的是布尔值,False表示非空值
df.notnull返回布尔值,False表示空值

clipboard.png

- 处理缺失值

有删除(dropna)、填充(fillna)两种方法

- 删除:dropna()

df.dropna() #删除包含na的整行。
df.dropna(how = 'all')  
# how是方法:如果为any,则表示包含空值的行,如果为all则表示删除整行均为空值的行。

clipboard.png

df.dropna(axis = 'columns') #会删除包含空值的列,返回的结果是前3列均不为空值的列。
df.dropna(axis = 'rows',thresh = 8)  #表示每行最少有8个非空值

clipboard.png

- 填充:fillna

df.fillna(0).head() #填充缺失值:用0 填充
df.fillna(df.mean()).round(2).head() # 用均值填充,保留2位小数
df.fillna(method='ffill').head()  #用前一个数填充
df.fillna(menthod = 'bfill').head()  #用后一个数据填充

--下面是对错行数据的处理

之前导入sogou数据的时候,有错行的,现在要删除错行的数据:'01 搜狗 错行数据.py'
在转换rank和number列为int格式的时候报错,发现是有的关键词到rank列了,所以rank列有字符的内容,经过简单考虑,准备删除这些错行的。

先找到错行的,就是筛选字符长度大于3位的

- 强制转换为int

然后强制转换为int,再删除没有转换成功,即为空值的行

#没发现of,强制转换为数字.coerce是强制的意思,ignore是忽略
pd.to_numeric(sogou['rank'],errors='coerce')
pd.to_numeric(sogou['number'],errors='coerce')

#也可以用下面的方法一行搞定:
sogou[['rank','number']] = sogou[['rank','number']].apply(pd.to_numeric,errors='coerce')

clipboard.png

- 删除rank为空的行

#删除这些错误值,如果用spark就不用处理这么久的数据了?
sogou.dropna(subset=['rank'],inplace=True)
sogou.info()


>>>Out:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 823818 entries, 0 to 825118
Data columns (total 6 columns):
date      823818 non-null datetime64[ns]
userid    823818 non-null object
words     823818 non-null object
rank      823818 non-null float64
number    823818 non-null float64
url       823818 non-null object
dtypes: datetime64[ns](1), float64(2), object(3)
memory usage: 44.0+ MB

- 保存csv

#保存为新的csv:
sogou.to_csv('sogoudayclear.csv',index = False)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值