Python数据预处理之清洗

使用Pandas进行数据预处理

 数据清洗中不是每一步都是必须的,按实际需求操作。

内容目录

1、数据的生成与导入

2、数据信息查看

    2.1、查看整体数据信息

    2.2、查看数据维度、列名称、数据格式

    2.3、查看数据特殊值和数值

        2.3.1、查看空值

        2.3.2、查看唯一值

       2.3.3、查看数值

       2.3.4、查看前后数据

3、数据清洗和预处理等步骤

    3.1、空值处理

    3.2、空格处理

    3.3、字符串大小写处理

    3.4、更改数据类型和列名称

    3.5、重复值处理

    3.6、数据替换

    3.7、数据合并和排序

    3.8、数据分组

4、数据提取和筛选

    4.1、按位置提取

    4.2、按标签提取

    4.3、按条件提取

    4.4、数据筛选

5、数据汇总与统计量计算

    5.1、groupby用法

    5.2、数据透视表用法

    5.3、数据采样

    5.4、数据求均值、方差等

    5.5、数据求相关系数等

6、数据存储

    6.1、存储到Execl

    6.2、存储到CSV

1.  读取数据

import pandas as pd

data = pd.read_excel(io='D:Adata.xlsx')

2.  数据信息

print(data.shape)    # 查看数据规模(维度)
print(data.dtypes)    # 查看各变量的数据类型
print(data.info())    # 查看数据整体信息
print(data.describe())   # 查看数据描述
print(data.isnull())    # 查看空值
print(data.columns)    # 列名
print(data['Age'].unique())    #查看Age唯一值
print(data.values)   # 查看数据表值
print(data.head(5))   #查看前5行
print(data.tail(5))    #查看后5行

3. 清洗

data.dropna(how='any', inplace=True)  # 空值处理,删除
data.fillna(0)   # 空值处理,填充:方法多种
data['name'] = data['name'].map(str.strip)  # 空格处理
data['name'].str.lower()   # 大小写转换
data['age'].astype('int')    # 更改数据类型
data.rename(columns={'name':'名字', 'Age':'年龄"})   # 更改列名
data['name'].drop_duplicates(keep='last')  # 删除重复值,保留最后一个
data['Embark'].replace('C', 'c')    # 数据替换

3.1 重复数据的处理

# 判断数据中是否存在重复值
data.duplicated().any

# 删除重复值,会删除除第一条后的,默认对所有变量判断
data.drop_duplicates()  
# 指定变量判断
data.drop_duplicates(subset=['name', 'age'],keep='first', inplace=False)  # first保留第一个,inplace=True对原数据修改

4. 缺失值(NA)识别与处理

# 判断各变量中是否存在缺失值
data.isnull().any(axis=0)

# 各变量中缺失值的数量
data.isnull().sum(axis=0)

# 各变量中缺失值的比例
data.isnull().sum(axis=0)/data.shape[0]

# 判断数据行中是否存在缺失值
data.isnull().any(axis=1).any() # 第二个any表示所有行

4.1 直接去除

# 列变量缺失非常高的(70%),删除该变量
data.drop(labes='name', axis=1,inplace=True)  # 删除name字段
# 删除name变量中对应的缺失值
data = data.drop(labels=data.index[['name'].isnull()],axis=0)

# 行内
# 缺失变量的将该行删除(缺失行的比例不高于5%)
# 变量缺失非常高的(70%),将该行删除

4.2 对缺失值进行填充(用中位数或平均数...)

data.fillna(value={'age':data['age'].mode()[0],  # 使用众数替换
                 'num':data['num'].mean()   # 使用平均值替换
                 },
                inplace=True
               )

data.dropna() #直接删除含有缺失值的行
data.dropna(axis = 1) #直接删除含有缺失值的列
data.dropna(how = 'all') #只删除全是缺失值的行
data.dropna(thresh = 3) #保留至少有3个非空值的行
data.dropna(subset = [u'血型 ']) #判断特定的列,若该列含有缺失值则删除缺失值所在的行

5. 异常数据的识别和处理

6. 排序

data.sort_valurs(by=['Age'])   # 按字段排序
data.sort_index()   #按索引排序

7. 合并merge

# 合并方式: inner, outer, left, right
# 组合方式: left_on+right_on、left_on+right_index、left_index+right_on、left_index+right_index

# merge参数
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True, suffixes=('_x', '_y'), copy=True, indicator=False)

# 例子
data1 = pd.DataFrame({'lkey': list('abcdefg'), 'data1': range(7)})
data2 = pd.DataFrame({'rkey': list('agsdgf'), 'data2':range(6)})
print(pd.merge(data1, data2, left_on='lkey', right_on='rkey'))

数据分组

data['group'] = np.where(data['fa']>60, 'high', 'low')
data[['fa', 'group']]

数据汇总与统计量计算

data.groupby(['columns'])   # 按字段分组

pd.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, 
margins=False, dropna=True, margins_name='All')   # 数据透视表

data.sample(n=2)
data.describe()  # 描述统计量
data['a'].cov(data['b']) # 计算两字段的协方差
data.corr()   # 相关性

计算每行指定属性的平均值,作为新的一列加入到原数据中。

data.eval('avg = (Chinese + Math +English)/3.0', inplace=True)

8. 保存

8.1 保存到excel

data.to_excel('data.xlsx', sheet_name='a')

8.2 保存到csv

data.to_csv('data1.csv')

8.2 保存到数据库

其他:

Pandas时间序列重采样(resample)方法中closed、label的作用

原文地址:https://www.cnblogs.com/lisen10/p/10705267.html