|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
电商交易数据清洗
CC拿到了一份2018.01.01--2019.06.30平台销售订单数据。她需要对这份数据进行清洗。
这份数据在工作目录下,文件名是"180101-190630交易数据.csv"。路径为:"180101-190630交易数据.csv"。数据集简介如下:
各个字段的要求如下:
id,作为index
order_id,不存在<=0的异常值,不存在重复值
user_id,不存在<=0的异常值
payment,不存在<0的异常值,转化成单位元
price,不存在<0的异常值,转化成单位元
items_count,不存在<0的异常值
cutdown_price,不存在<0的异常值,转化成单位元
post_fee,不存在<0的异常值,转化成单位元
create_time,pay_time,转化成时间格式,不存在create_time>pay_time的异常值
数据集中,是否存在缺失值、异常值、重复值,需要自行进行判断。然后再进行处理。
最后,用df.info()输出清洗后的结果。
import os
import pandas as pd
os.getcwd()
df = pd.read_csv('180101-190630交易数据.csv',index_col = 'id')
df['payment'] = df['payment']/100
df['price'] = df['price']/100
df['cutdown_price'] = df['cutdown_price']/100
df['post_fee'] = df['post_fee']/100
dfo =df[(df['order_id'] >0)|(df['user_id']>0)|(df['payment']>=0)|(df['price']>=0)|(df['items_count'] >=0)|(df['cutdown_price']>=0)|(df['post_fee']>=0)]
df.drop(index=dfo.index,inplace=True)
df["create_time"]=pd.to_datetime(df["create_time"])
df["pay_time"]=pd.to_datetime(df["pay_time"])
Wrong = df[(df["create_time"]) > (df["pay_time"])]
df.drop(index=Wrong.index,inplace=True)
df.info()
代码有点小错误想请教一下
根据任务要求和代码,有以下几点需要修正:
1. 需要将读入的CSV文件路径修改为绝对路径或相对于当前工作目录的相对路径。
2. 在筛选数据的语句中,应该使用逻辑与`&`连接条件而不是逻辑或`|`,否则会过滤掉很多正常数据。同时应该将所有条件都取反,因为题目中要求保留非异常值和非重复值。
3. 数据清洗后应该重新调用`df.info()`打印修改后的DataFrame信息。
修改后代码如下:
- import os
- import pandas as pd
- # 获取当前工作目录并且拼接文件路径
- cwd = os.getcwd()
- filename = "180101-190630交易数据.csv"
- filepath = os.path.join(cwd, filename)
- df = pd.read_csv(filepath, index_col='id')
- df['payment'] = df['payment'] / 100
- df['price'] = df['price'] / 100
- df['cutdown_price'] = df['cutdown_price'] / 100
- df['post_fee'] = df['post_fee'] / 100
- # 反转判断条件,保留非异常值和非重复值
- dfo = df[(df['order_id'] <= 0) | (df['user_id'] <= 0) |
- (df['payment'] < 0) | (df['price'] < 0) |
- (df['items_count'] < 0) | (df['cutdown_price'] < 0) |
- (df['post_fee'] < 0)]
- df.drop(index=dfo.index, inplace=True)
- df["create_time"] = pd.to_datetime(df["create_time"])
- df["pay_time"] = pd.to_datetime(df["pay_time"])
- # 只保留 create_time <= pay_time 的记录
- Wrong = df[(df["create_time"] > df["pay_time"])]
- df.drop(index=Wrong.index, inplace=True)
- df.info()
复制代码
有用请设置最佳答案
|
|