鱼C论坛

 找回密码
 立即注册
查看: 2547|回复: 7

[已解决]求助大神们

[复制链接]
发表于 2023-1-17 13:49:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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()
代码有点小错误想请教一下
最佳答案
2023-4-12 17:40:07
根据任务要求和代码,有以下几点需要修正:

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()
有用请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-1-17 14:42:06 | 显示全部楼层
数据也不放,你遇到了什么错误也不说
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-17 15:57:45 | 显示全部楼层
python给出的错误请发一下,我们好”对症下药“
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-17 16:12:50 | 显示全部楼层
sfqxx 发表于 2023-1-17 15:57
python给出的错误请发一下,我们好”对症下药“

<class 'pandas.core.frame.DataFrame'>
Int64Index: 0 entries
Data columns (total 9 columns):
#   Column         Non-Null Count  Dtype         
---  ------         --------------  -----         
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_price  0 non-null      float64      
6   post_fee       0 non-null      float64      
7   create_time    0 non-null      datetime64[ns]
8   pay_time       0 non-null      datetime64[ns]
dtypes: datetime64[ns](2), float64(4), int64(3)
memory usage: 108.0 byte
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-17 16:17:13 | 显示全部楼层
isdkz 发表于 2023-1-17 14:42
数据也不放,你遇到了什么错误也不说

<class 'pandas.core.frame.DataFrame'>
Int64Index: 0 entries
Data columns (total 9 columns):
#   Column         Non-Null Count  Dtype         
---  ------         --------------  -----         
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_price  0 non-null      float64      
6   post_fee       0 non-null      float64      
7   create_time    0 non-null      datetime64[ns]
8   pay_time       0 non-null      datetime64[ns]
dtypes: datetime64[ns](2), float64(4), int64(3)
memory usage: 108.0 byte
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-17 16:21:32 | 显示全部楼层
Larryeric 发表于 2023-1-17 16:17
Int64Index: 0 entries
Data columns (total 9 columns):
#   Column         Non-Null Count  Dtyp ...


这不是报错信息,是结果跟你的预期有什么不符吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-22 22:43:16 | 显示全部楼层
我理解的,楼主想要的几个条件是同时满足,那么筛选时应该取交集而不是取并集。就是把下面这行代码里面的“|”换成“&”。
我也不知道我理解对题意了没。
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)]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-12 17:40:07 | 显示全部楼层    本楼为最佳答案   
根据任务要求和代码,有以下几点需要修正:

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()
有用请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-29 10:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表