整理一些用Pandas进行数据预处理的操做

读入数据

读入部分列,自动处理千分位符python

column_num = [x for x in range(13,35)]
df = pd.read_csv('???.csv',encoding='gbk',thousands=',',usecols=column_num)

删除空值行

针对部分列web

#这里的any是针对某一行,subset中有任何一个为空,就删除该行
df = df.dropna(axis=0, how='any',subset=[A','B']) df.shape

处理特殊字符

主要针对百分号:百分号会致使列的dtype改变,因此思路是先找到object类型的列,而后判断是否含有百分号。api

from pandas.api.types import is_object_dtype
object_column_index = [index for index, item in enumerate(df.dtypes) if is_object_dtype(item)]
print("object型的列索引为:%s" %object_column_index)
# 按列处理
for i in object_column_index:
    data = df.ix[:10, i].tolist()
    for item in data:
        if str(item).find("%"):
            continue
        else:
            print("出现了不含有百分号的行")
            break
    # 替换为对应小数 
    df.ix[:, i] = df.ix[:, i].map(lambda x: float(str(x).replace('%',''))/100)
df.head()

缺失值填充

均值或者最大最小值,api是现成的。bash

#观察是否包含缺失值
df.isnull().any()

#也能够直接获取含有缺失值的列索引
null_index = [index for index, item in enumerate(df.isnull().any()) if item==True]
null_index

#填充
for i in null_index:
    df.ix[:,i] = df.ix[:,i].fillna(df.ix[:,i].mean())