第五章 使用pandas进行数据预处理

本章详述如何使用pandas进行数据预处理,包括数据合并(堆叠合并、主键合并、重叠合并)、数据清洗(处理重复值、缺失值和异常值)、数据标准化和转换(哑变量处理、离散化)。通过具体任务,如订单详情表的去重、插补缺失值、菜品数据处理,以及实训案例,深入理解数据预处理流程。
摘要由CSDN通过智能技术生成

第五章 使用pandas进行数据预处理

任务5.1 合并数据

5.1.11堆叠合并数据

1、横向堆叠
#索引完全相同时的横向堆叠
import numpy as np
import pandas as pd
from sqlalchemy import create_engine
conn = create_engine("mysql+pymysql://root:123456@127.0.0.1/testdb?charset=utf8mb4")
detail1=pd.read_sql('meal_order_detail1',conn)
df1=detail1.iloc[:,:10]#取出detail1的前10列数据
df2=detail1.iloc[:,10:]#取出detail1的后9列数据
print('合并df1的大小为%s,df2的大小为%s。'%(df1.shape,df2.shape))
#result = pd.concat([df1, df4], axis=1, join="inner")
frames = [df1,df2]
print('外连接合并后的数据框大小为:',pd.concat(frames,axis=1,join="outer").shape)
print('内连接合并后的数据框大小为:',pd.concat(frames,axis=1,join="inner").shape)
2、纵向堆叠
#列名完全相同的concat纵向堆叠
df3=detail1.iloc[:1500,:]#取出detail1的前1500行数据
df4=detail1.iloc[1500:,:]#取出detail1的后1500行数据
print('合并df3的大小为%s,df4的大小为%s。'%(df3.shape,df4.shape))
#result = pd.concat([df1, df4], axis=1, join="inner")
frames = [df3,df4]
print('外连接合并后的数据框大小为:',pd.concat(frames,axis=1,join="outer").shape)
print('内连接合并后的数据框大小为:',pd.concat(frames,axis=1,join="inner").shape)

注:
除了concat函数之外,append方法也可以用于纵向合并两张表,但是使用append方法实现纵向表堆叠有一个前提条件,那就是两张表的列名需要完全一致。

print('合并df3的大小为%s,df4的大小为%s。'%(df3.shape,df4.shape))
print('append纵向堆叠后的数据框大小为:',df3.append(df4).shape)

5.1.2主键合并数据

import pandas as pd
#使用merge函数合并数据表
order=pd.read_csv('./data/meal_order_info.csv',sep=',',encoding='gb18030')#读取订单信息
#将info_id转换成字符串格式,为合并作准备
order['info_id']=order['info_id'].astype('str')
#订单详情表和订单信息表都有订单编号
order_detail=pd.merge(detail1,order,left_on='order_id',right_on='info_id')
print('detail订单详情表的原始形状为:',detail1.shape)
print('order订单信息表的原始形状为:',order.shape)
print('订单详情表和订单信息表主键合并后的形状为',order_detail.shape)
#使用join方法实现主键合并
order.rename({
   'info_id':'order_id'},inplace=True)
order_detail1=detail1.join(order,on='order_id')
print('订单详情表和订单信息表join合并后的形状为',order_detail1.shape)

5.1.3重叠合并数据

#建立两个字典,除了ID外,别的特征互补
dic1={
   'ID':[1,2,3,4,5,6,7,8,9],'System':['win10','win10',np.nan,'win10',np.nan,np.nan,'win7','win7','win8'],'cpu':['i7','i5',np.nan,
                                                                                                                  'i7',np.nan,np.nan,'i5','i5','i3']}
dic2={
   'ID':[1,2,3,4,5,6,7,8,9],'System':[np.nan,np.nan,'win7',np.nan,'win8','win7',np.nan,np.nan,np.nan],'cpu':[np.nan,np.nan,'i3',np.nan,'i7','i5',np.nan,np.nan,np.nan]}
#转换两个字典为DataFrame
df5=pd.DataFrame(dic1)
df6=pd.DataFrame(dic2)
print('经过重叠合并后的数据为:\n',df5.combine_first(df6))

5.1.4任务实现

1、堆叠不同时间的订单详情表
#将多张菜品订单详情表纵向合并
import numpy as np
import pandas as pd
from sqlalchemy import create_engine
conn = create_engine("mysql+pymysql://root:123456@127.0.0.1/testdb?charset=utf8mb4")
#读取数据
detail1=pd.read_sql('meal_order_detail1',conn)
detail2=pd.read_sql('meal_order_detail2',conn)
detail3=pd.read_sql('meal_order_detail3',conn)
#纵向堆叠3张表
detail=detail1.append(detail2)
detail=detail.append(detail3)
print('3张订单详情表合并后的形状为:',detail.shape)
2、主键合并订单详情表、订单信息表和客户信息表
order=pd.read_csv('./data/meal_order_info.csv',sep=',',encoding='gb18030')#读取订单信息
user=pd.read_excel('./data/users_info.xlsx')#读取订单信息
#数据类型转换,存储部分数据
order['info_id']=order['info_id'].a
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值