在我们人工进行数据采集时,难免会有遗漏或者误采的情况,数据中经常可能会有空值(NAN)和空格出现。在进行数据分析和处理之前,进行数据清洗是很有必要的流程,同时也是整个数据分析过程中最为重要的环节。
在叙述方法之前,先构造一个含有空格和空值的DataFrame类型的数据:
# 导入相应模块
import numpy as np
import pandas as pd
from numpy import nan as NaN
data = {'name':['Jack','T om','Ma ry'],
'age':[18,19,NaN ],
'gender':['m',NaN,NaN]}
df = pd.DataFrame(data)
df
第一步,数据清洗——填充空值fillna():
def data_cleaning1(data):
cols = data.columns.tolist()
for col in cols:
if data[col].dtype == 'object':
data[col].fillna('缺失数据',inplace=True ) # inplace=True,表在原数据上进行更改
else:
data[col].fillna(0,inplace=True)
return data
df = data_cleaning(df)
df
知识补充,函数fillna():
# 功能:使用指定的方法填充NA / NaN值
DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
# 参数:value : 变量,字典,Series or DataFrame
# 用于填充缺失值(例如0),或者指定为每个索引(对于Series)或列(对于DataFrame)使用哪个字
# 典/Serise/DataFrame的值。(不在字典/Series/DataFrame中的值不会被填充)
# method : {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, 默认值 None ;
# pad/ffill:用前一个非缺失值去填充该缺失值
# backfill/bfill:用下一个非缺失值填充该缺失值
# None:指定一个值去替换缺失值(缺省默认这种方式)
# axis :修改填充方向,{0->‘index’, 1->‘columns’}
# inplace : boolean, 默认值 False,生成新数据。如果为Ture,直接在原数据上进行更改
# limit : int, 默认值 None; 限制填充个数
# downcast : 默认是None
第二步,数值清洗2——填充空格(.replace(' ',''):
针对字符串的一个常用操作replace(替换),将空格用无字符替换,如下
def data_cleaning2(data,*cols):
for c in cols:
data[c] = data[c].str.replace(' ','')
return data
df = data_cleaning2(df,'name')
df
以上,整理的清洗数据的空值和空格的方法。第一步的方法思路,判断数据当前列为字符还是整型,是字符采用‘缺失数据’填充,若为其它则用0填充。第二步的方法思路,将当前列的数据中的空格采用无字符替换。