求助大神们
电商交易数据清洗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()
代码有点小错误想请教一下 数据也不放,你遇到了什么错误也不说 python给出的错误请发一下,我们好”对症下药“{:10_256:} sfqxx 发表于 2023-1-17 15:57
python给出的错误请发一下,我们好”对症下药“
<class 'pandas.core.frame.DataFrame'>
Int64Index: 0 entries
Data columns (total 9 columns):
# Column Non-Null CountDtype
--------- -------------------
0 order_id 0 non-null int64
1 user_id 0 non-null int64
2 payment 0 non-null float64
3 price 0 non-null float64
4 items_count 0 non-null int64
5 cutdown_price0 non-null float64
6 post_fee 0 non-null float64
7 create_time 0 non-null datetime64
8 pay_time 0 non-null datetime64
dtypes: datetime64(2), float64(4), int64(3)
memory usage: 108.0 byte isdkz 发表于 2023-1-17 14:42
数据也不放,你遇到了什么错误也不说
<class 'pandas.core.frame.DataFrame'>
Int64Index: 0 entries
Data columns (total 9 columns):
# Column Non-Null CountDtype
--------- -------------------
0 order_id 0 non-null int64
1 user_id 0 non-null int64
2 payment 0 non-null float64
3 price 0 non-null float64
4 items_count 0 non-null int64
5 cutdown_price0 non-null float64
6 post_fee 0 non-null float64
7 create_time 0 non-null datetime64
8 pay_time 0 non-null datetime64
dtypes: datetime64(2), float64(4), int64(3)
memory usage: 108.0 byte Larryeric 发表于 2023-1-17 16:17
Int64Index: 0 entries
Data columns (total 9 columns):
# Column Non-Null CountDtyp ...
这不是报错信息,是结果跟你的预期有什么不符吗 我理解的,楼主想要的几个条件是同时满足,那么筛选时应该取交集而不是取并集。就是把下面这行代码里面的“|”换成“&”。
我也不知道我理解对题意了没。
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)] 根据任务要求和代码,有以下几点需要修正:
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()
有用请设置最佳答案
页:
[1]