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) #模糊匹配