pandas 清洗Excel数据

使用pandas数据清洗

目录

使用pandas数据清洗


  • 数据表中的重复值
    • duplicated()
    • drop_duplicated()
  • 数据表中的空值/缺失值
    • isnull()¬null()
    • dropna()
    • fillna()
  • 数据间的空格
    • 查看数据中的空格
    • 去除数据中的空格
    • 大小写转换
  • 数据中的异常和极端值
    • replace()
  • 更改数据格式
    • astype()
    • to_datetime()
  • 数据分组
    • cut()
  • 数据分列
    • split()

1、简易使用

import numpy as np
import pandas as pd

loandata=pd.DataFrame(pd.read_excel('loandata.xlsx')) # 将Excel中的数据加载到pd中

""" 数据空值处理 """
loandata.duplicated()         # 查找并显示数据表中的重复值
loandata.drop_duplicates()    # 删除表中的所有重复值,默认重first到last删除,也就是从第一行到最后一行删除重复行
df['province'].duplicated()   # 显示某列重复值
df['province'].duplicated().to_csv(filename, index=False, encoding="gb2312")   # 显示数据保存到Excel,encoding是为了保证保存的Excel不为乱码

df['province'].isnull()       # 显示某列为空的值(True/False)
df['province'].notnull()      # 显示某列不为空的值(True/False)

loandata.fillna(0)            # 填充空值0,可以填充任意值
loandata['province'].dropna() # 删除某列空值
loandata['loan_amnt']=loandata['loan_amnt'].fillna(loandata['total_pymnt']-loandata['total_rec_int']).astype(np.int64) # 将某列值为空的填充为实际需要的某个值	
loandata['annual_inc']=loandata['annual_inc'].fillna(loandata['annual_inc'].mean()) # 将annual_inc列的平均值填充空值


""" 数据间的空格处理 """
loandata['loan_status'].value_counts()  # 对数据进行列频统计,显示一列中各数据显示的次数
# 针对有时Excel中数据两边存在空格,则列频统计就不准确
loandata['term']=loandata['term'].map(str.strip)    # 删除列数据左右两侧空格
loandata['term']=loandata['term'].map(str.lstrip)   # 删除列数据左侧空格
loandata['term']=loandata['term'].map(str.rstrip)   # 删除列数据右侧空格


""" 数据大小写转化 """
loandata['term']=loandata['term'].map(str.upper)    # 列数据转化为全大写
loandata['term']=loandata['term'].map(str.lower)    # 列数据转化为全小写
loandata['term']=loandata['term'].map(str.title)    # 列数据转化为首字母大写


""" 检测数据类型 """
loandata['emp_length'].apply(lambda x: x.isalpha())    # 判断整列数据是否由字母和数字组成
loandata['emp_length'].apply(lambda x: x. isalnum ())  # 判断整列数据是否纯字母
loandata['emp_length'].apply(lambda x: x. isdigit ())  # 判断整列数据是否纯整数


""" 数据异常和极端值 """
loandata.describe().astype(np.int64).T  # 以列表的形式可以显示列为整型的最大最小值
loandata.replace([100000,36],loandata['loan_amnt'].mean())  # 对异常数据100000和36替换为均值


""" 更改数据格式 """
loandata['loan_amnt']=loandata['loan_amnt'].astype(np.int64)  # 将列loan_amnt数据类型转化为int64,根据需要也可以转为float64
loandata['issue_d']=pd.to_datetime(loandata['issue_d'])       # 将数据转化为日期格式
loandata.dtypes                                               # 显示当前列表各列数据类型


""" 数据分组 """
bins = [0, 5, 10, 15, 20]
group_names = ['A', 'B', 'C', 'D']
loandata['categories'] = pd.cut(loandata['open_acc'], bins, labels=group_names)

bins = [min(df.attention) - 1, 100, 500, 1000, max(df.attention) + 1]
labels = ['100票以及以下', '100到500票', '500票到1000票', '1000票岁以上']
df['票数分层'] = pd.cut(df.attention, bins, labels=labels)
ptResult = df.pivot_table(values=['attention'], index=['票数分层'], 
                          columns=['province'], aggfunc=[numpy.size])


""" 数据分列 """
grade_split = pd.DataFrame((x.split('-') for x in loandata.grade),index=loandata.index,columns=['grade','sub_grade']) # 将一列数据拆分开显示为两列
loandata=pd.merge(loandata,grade_split, how='inner', on="categories", right_index=True, left_index=True)  # 合并两个pd对象,根据列categories合并
loandata=pd.merge(loandata, grade_split, right_index=True, left_index=True)  # 直接合并pd对象,两个pd对象顺序一样



带图详细描述

你可能感兴趣的:(python,pandas)