数据清洗

0.常用库导入

import pandas as pd
import numpy as pd
import matplotlib.pyplot as plt

1.1数据整合

df1=pd.read_csv('111.csv')
df2=pd.read_csv('222.csv')
df=df.concat([df1,df2],axis=0)
df.info()

1.2数据匹配

df=df1.merge(df2,how='left',on=['左表列匹配唯一值',‘右表列匹配唯一值’’])

2.1.数据概况

df.info()
df.shape()
df.head()

2.2判断数据的重复情况以及重复值处理

df[df.duplicated()]:查看重复的数据
df.drop_duplicates():去重操作,所有列都重复
df.drop_duplicates(‘id’):去除id列重复的所有记录

3.1判断数据的缺失情况

df.isnull():返回布尔值true1 false0
df.isnull().sum():返回每个字段缺失值的数量
df.isnull().any():返回哪些列有缺失值
df.isnull().sum(axis=0)/df.shape[0]:缺失值的比例

3.2缺失值处理:删、补、不处理

根据缺失值的分布将缺失值分为:
完全随机缺失:对其他变量无影响:eg:家庭住址
随机缺失
非随机缺失:高收入

对于随机缺失和非随机缺失,不可以直接删除。

:除非数据量非常大,否则不建议直接删除
df.dropna(how=‘any’)

补: 替换缺失值、拟合缺失值

替换缺失值分为 众数替换(定性变量)、中位数(含异常值)、 平均值、热卡填补、k均值聚类(找相似)
拟合缺失值(预测)包括:回归、极大似然估计、随机森林、虚拟变量

#替换price列的缺失值
df['price'].fillna(df['price'].median())
df['price'].fillna(df['price'].mean())
df.fillna(value = {'gender': df['gender'].mode()[0],
 # 使用性别的众数替换缺失性别
'age':df['age'].mean() # 使用年龄的平均值替换缺失年龄},
inplace = True  # 原地修改数据)

以众数、中位数、平均数替换的值往往不具有高准确性,所以有了拟合缺失值的方法,(机器学习等等预测缺失的值)
对Titanic数据集中的Age变量做插补法完成缺失值的处理
KNN分类回归模型举例:

# 读取数据

titanic = pd.read_csv('Titanic.csv')

# 删除缺失严重的Cabin变量

titanic.drop(labels='Cabin', axis = 1, inplace=True)

# 根据Embarked变量,删除对应的缺失行

titanic.dropna(subset=['Embarked'], inplace=True)

# 删除无关紧要的变量(这些变量对后面预测年龄没有太多的帮助)

titanic.drop(labels=['PassengerId','Name','Ticket','Embarked'], axis = 1, inplace=True)

# 将字符型的性别变量映射为数值变量

titanic.Sex = titanic.Sex.map({'male':1, 'female':0})

# 将数据拆分为两组,一是年龄缺失组,二是年龄非缺失组,后续基于非缺失值构建KNN模型,再对缺失组做预测

nomissing = titanic.loc[~titanic.Age.isnull(),]

missing = titanic.loc[titanic.Age.isnull(),]

# 导入机器学习的第三方包

from sklearn import neighbors

# 提取出所有的自变量

X = nomissing.columns[nomissing.columns != 'Age']

# 构建模型

knn = neighbors.KNeighborsRegressor()

# 模型拟合

knn.fit(nomissing[X], nomissing.Age)

# 年龄预测

pred_age = knn.predict(missing[X])

分类回归模型代码借鉴博主:嘿呀嘿呀 拔罗卜
网址:

https://blog.csdn.net/weixin_42587745/article/details/90643962?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159669848119724845061831%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=159669848119724845061831&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v3~pc_rank_v2-4-90643962.first_rank_ecpm_v3_pc_rank_v2&utm_term=python++%E6%95%B0%E6%8D%AE%E7%9A%84%E7%BC%BA%E5%A4%B1%E5%80%BC%E5%A4%84%E7%90%86&spm=1018.2118.3001.4187

4数据筛选

df=pd.red_csv('mam.xls',encoding='gbk',sep='\t')
print(df.shape)
df=df[(df['科目']=='语文')&(df['成绩']>=80)&(df[‘班级’].isin([‘一年级’,‘二年级’,‘三年级’]))]

5数据透视表

df_pivot=df.pivot_table(index='姓名',columns='科目',values=‘成绩’,aggfunc='sum',fill_val=0,margins=True,Margins_naem='合计')
df_pivot

6数据排序

df.sort_values(by='合计',inplace='True',ascending='False')
# inplace 作用:是否在原对象基础上修改
True:不创建新对象,直接在原对象修改
False:对数据进行修改,创建并返回新的对象承载其修改结果。
#ascending 的False:desc

7.数据替换

df=df.replace('南过','难过')
df=df.replace('?','np.nan')  #精准匹配

df=df.replace('Tai', 'Cy', regex=True)  #模糊匹配

你可能感兴趣的:(Python)