![0585f7a428b52c039c6f650b438572ed.png](https://img-blog.csdnimg.cn/img_convert/0585f7a428b52c039c6f650b438572ed.png)
1. 目的
了解使用pandas数据处理
下面操作相对复杂些, 写的比较粗糙
如果那些看不明白, 可以留言, 我会花些时间整理
1.1 数据样例
数据来源:天池新人实战赛o2o优惠券使用预测
User_id,Merchant_id,Action,Coupon_id,Discount_rate,Date_received,Date
13740231,18907,2,100017492,500:50,20160513,null
13740231,34805,1,null,null,null,20160321
14336199,18907,0,null,null,null,20160618
15137031,25104,2,100120354,150:50,20160613,null
15137031,44706,2,100071973,50:5,20160317,null
1.2 字段说明
- Coupon_id: 优惠券ID:null表示无优惠券消费,此时Discount_rate和Date_received字段无意义
- Discount_rate: 优惠率:x in [0,1]代表折扣率;x:y表示满x减y。单位是元
- Distance: user经常活动的地点离该merchant的最近门店距离是x*500米(如果是连锁店,则取最近的一家门店),xin[0,10];null表示无此信息,0表示低于500米,10表示大于5公里;
- Date_received: 领取优惠券日期
- 消费日期:如果Date=null & Coupon_id != null,该记录表示领取优惠券但没有使用,即负样本;如果Date!=null & Coupon_id = null,则表示普通消费日期;如果Date!=null & Coupon_id != null,则表示用优惠券消费日期,即正样本;
1.3 环境准备
import pandas as pd
df = pd.read_csv("example.csv")
2. 数据处理
2.1 列变换
2.1.1 单列变换
- 针对单列进行null 替换, 生成新列
df['newDate'] = df.Date.replace("null", 0)
# Date列, 分段映射
def mapDate(x):
if(x=="null"):
return 0
elif(x<=20160501):
return 1
else:
return 2
df.Date.apply(lambda x: mapDate(x))
df['Action'].apply(lambda x: 1 if (x>=0 and x<=15) else 0)
- 计算折扣率
In [28]: def discountFuc(x):
....: list_discount = x.split(":")
....: if(x=="null"):
....: return 0.1
....: elif(len(list_discount)==2):
....: return round(float(list_discount[1]) / float(list_discount[0]), 3)
....: else:
....: return list_discount[0]
....: