实战py - 节2:采用numpy、pandas进行数据整理及清洗

现有3张表,表结构如下:
在这里插入图片描述

  • 数据级联,合并,清洗;
  • 查看各个品类的交易次数、交易金额;
  • 查看每天每个品类的交易金额;
  • 查看交易人员地域为北京,不同商品品类的购买次数;
  • 查找交易金额最大的一条数据
import numpy as np
import pandas as pd
import os

# 读取数据
spu_order_1 = pd.read_excel('./spu_order_1.xlsx') 
#对于文件比较多的情况下,可以采用第三方模块“os”
root =  './' #根路径
dirname = os.listdir(root) #查看目录下的所有文件
xlsx_df = "" #xlsx数据池
csv_list = [] #csv数据池
for fname in dirname:
    fpath = os.path.join(root,fname)
    if fname.endswith('.csv'):
        print('csv格式文件的读取')
        csv_list.append( pd.read_csv(fpath,index_col=0) )
    elif fname.endswith('.xlsx'):
        print(f'{fname} xlsx格式文件的读取') #'{} xlsx格式文件的读取'.format(fname)
        xlsx_df = pd.read_excel(fpath,index_col=0)
    else:
        print('其他文件')
        


#数据级联,合并,清洗
merge1 = pd.concat(csv_list, ignore_index=True) #级联csv文件,忽略原索引,索引重排
merge2 = pd.merge(left=merge1,right=xlsx_df,how='left',left_on=id,right_on=spu_id) #合并
merge2.isnull().any(axis=0) #查看列是否有空值
merge2.info() #查看各个列的数据类型,occur_date列为对象(字符串)类型
pd.to_datetime('2022-01-01') #可将字符串格式的日期转为时间戳,前提格式标准
#例如现在格式“20-六月-11”,而‘20-SEP-11’是一个标准格式字符串
month_dict = {'一月':1, '二月':2, '三月':3, '四月':4, '五月':5, '六月':6}
def trans_string_date(x):
    if isinstance(x,str): #判断x是否为字符串
        day1,month1,year1 = x.split('-')
        return '20%d-%d-%d'%(int(year1), int(month_dict[month1]), int(day1))
occur_date1 = merge2[occur_date].map(trans_string_date) #映射为标准时间格式字符串
merge2['occur_date'] = pd.to_datetime(occur_date1) #重新写入dataframe
#可以按照时间列进行排序
merge2.sort_values(by='occur_date', ascending=True, inplace=True) #升序排序,并写入内存



#查看各个品类的交易次数、交易金额
data1 = merge2['category_name'].value_counts()
data2 = merge2.groupby('category_name')['amount'].sum()

#查看每天每个品类的交易金额
data3 = merge2.groupby(by=['occur_date','category_name'])['amount'].sum() #类Series格式
data4 = data3.unstack() #行索引转为列索引,形成交叉表格式
data4 = data4.fillna(value=0.0) #交叉表的空值设置为0

#查看交易人员地域为北京,不同商品品类的购买次数
con = user_region == '北京'
data5 = merge2.loc[con,category_name].value_counts()
data5.reset_index() #将第一列转为索引

#查找交易金额最大的一条数据
max_amount = merge2.amount.max()
condition = merge2.amount == max_amount
data6 = merge2.loc[condition]
data7 = merge2.query('merge2.amount == %f'%(max_amount)) #格式化运算符

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值