第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表示空值
- 处理缺失值
有删除(dropna)、填充(fillna)两种方法
- 删除:dropna()
df.dropna() #删除包含na的整行。
df.dropna(how = 'all')
# how是方法:如果为any,则表示包含空值的行,如果为all则表示删除整行均为空值的行。
df.dropna(axis = 'columns') #会删除包含空值的列,返回的结果是前3列均不为空值的列。
df.dropna(axis = 'rows',thresh = 8) #表示每行最少有8个非空值
- 填充: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')
- 删除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)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。