python电商数据预处理

电商数据预处理

今天对电商数据进行了预处理,主要处理了

1. 提取2019年的订单数据
2. 处理业务流程不符的数据(支付时间早于下单时间、支付时长超过30分钟、订单金额小于0、支付金额小于0)
3. 处理渠道为空的数据(补充众数)
4. 处理平台类型字段(去掉多余的空格,保持数据一致)
5. 添加折扣字段,处理折扣大于1的字段(将支付金额修改为“订单金额*平均折扣”)

数据在这里,有兴趣跟我一起做。(百度网盘
链接:https://pan.baidu.com/s/1yprZr0sxzLLPPBy-ICCocg
提取码:dmmo

各字段说明:
1.‘id’ 打酱油的索引
2.‘orderID’ 订单id
3. ‘userID’ 用户id
4. ‘goodsID’ 商品id
5. ‘orderAmount’ 订单价格
6. ‘payment’ 实付价格
7. ‘chanelID’ 渠道
8. ‘platfromType’ 平台类型
9. 'orderTime’下单时间
10. 'payTime’支付时间
11. ‘chargeback’ 是否退款

废话不多说,直接上代码

# 导入数据分析三大神器库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

1.导入数据

# 1.导入数据
ds_df = pd.read_excel('data/某电商网站订单数据.xlsx') 
 #请你将路径换为自己放数据的路径

1.1查看数据前五行

ds_df.head() # 查看数据前五行

在这里插入图片描述

1.2属性等信息

ds_df.info()

在这里插入图片描述

2.数据预处理

2.1. 提取2019年的订单数据

# 进行布尔索引
df_19 = ds_df[ds_df.orderTime.dt.year==2019]
len(df_19)

在这里插入图片描述
这里可知数据已经变少了,接下来我们就用这个新的df_19进行进一步处理

2.2 处理业务流程不符的数据(支付时间早于下单时间、支付时长超过30分钟、订单金额小于0、支付金额小于0)

 # 过滤掉支付时间早于下单时间的订单
df_19 = df_19[~(df_19.payTime<df_19.orderTime)] 

# 过滤掉支付时长超过30分钟的订单
df_19 = df_19[(df_19.payTime-df_19.orderTime)<pd.to_timedelta('0 days 00:30:00')] 
# 过滤掉订单金额小于0、支付金额小于0的订单
df_19 = df_19[(df_19.orderAmount>0) & (df_19.payment > 0)]
len(df_19)

2.3. 处理渠道为空的数据(补充众数)

df_19.chanelID.isnull().any() # 判断是否有空值

# 拿到chanelID的众数,这里得到的众数是一个对象,不能用于在直接填充
chanel_mode = df_19.chanelID.mode()  
# 填充空值(将上面的对象转换成字符串再填充)
df_19.fillna(value={'chanelID':str(chanel_mode)},inplace=True)

2.4. 处理平台类型字段(去掉多余的空格,保持数据一致)

# 将所有字符转成小写
df_19.platfromType = df_19.platfromType.str.lower()
# 去掉多余的空格,保持数据一致
df_19.platfromType = df_19.platfromType.str.replace(' ','')

2.5. 添加折扣字段,处理折扣大于1的字段(将支付金额修改为“订单金额*平均折扣”)

# 获取折扣正常订单
temp = df_19[~((df_19.payment / df_19.orderAmount)>1)]
# 计算正常订单的平均折扣
mean_discount=(temp.payment / temp.orderAmount).mean()
# 拿出异常折扣订单
temp1 = df_19[(df_19.payment / df_19.orderAmount)>1]
# 将异常的支付价格改正
temp1['payment'] = np.round(temp1.orderAmount*mean_discount,2)
temp1.set_index('id')
temp1.index
over_discount_index = temp1.index
# 将df_19中的异常行用temp1的行来替换
df_19.loc[over_discount_index] = temp1.loc[over_discount_index]

到这里就完成了预处理,但是你发现索引并不好看,于是我将索引重置

df_19.reset_index(drop=True,inplace=True)

完成后效果是这样的。
在这里插入图片描述
想了解更多知识,欢迎移步到微信公众号
扫码或搜索数据分析者

在这里插入图片描述

好了,创作不易,有帮助留下你的赞或小额打赏哦!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python和数据分析

钟意作者

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值