Python Pandas 使用一波带走

1 篇文章 0 订阅
1 篇文章 0 订阅

#Python Pandas 使用一波带走

##简介
Pandas非常易用,但当前很多材料,讲解的过于复杂,容易让用户望而却步。最近几天因流感原因被封闭在家,因此有想起做个简单的样例,能把几个常用功能串一下,便于一些初级用户理解

下载安装

#需要提前安装好pandas
`pip install pandas`

背景
我们希望分析用户和产品的金额,但是当前excel有2个sheet, 只有先把这2份数据进行关联,然后按用户+Item汇总金额。

步骤:
1. 数据准备
2. 读取excel数据
3. 合并数据,把2份数据合并到1张数据表
4. 数据处理,计算出汇总接,然后存放在新的列中
5. 数据透视,根据客户和商品汇总金额信息
6. 输出结果,把结果保存到EXCEL中

注意Python版本:

  • 从 2019年1月1日 开始,所有版本都只支持Python 3,Python核心团队计划在2020年1月1日停止支持Python 2.7

1.数据准备

当前文件夹下SalesData,xlsx有2个SHEET:一份是商品销售数量order_quantity:,一份是商品单价Item_Price

  1. order_quantity

    Order_NOCustomerItemQuantity
    S001Jimbiscuit1
    S002Lalabeer4
    S002Lalabiscuit6
    S003Jimchocolate1
    S003Jimbeer3
  2. Item_Price

    ItemPrice
    biscuit20
    beer6
    chocolate10

2.读取EXCEL

加载EXCEL文件. pd.read_excel(io, sheetname=0…),其中io是读取的EXCEL名,sheetname是SHEET名。

输入[1]:

import pandas as pd
import numpy as np
df_order_quantity = pd.read_excel("SalesData.xlsx",sheet_name='order_quantity')
df_Item_Price = pd.read_excel("SalesData.xlsx",sheet_name='Item_Price')

注意: 新手读取EXCEL时经常有报错找不到excel,请检查当前文件夹下是否有此Excel及名称是否书写正确。 可以通过os.getcwd()获取当前路径,详情可以参与os模块说明文档
输入[2]:

print(df_order_quantity)
print(df_Item_Price)

输出[2]:

Order_NO Customer       Item  Quantity
0     S001      Jim    biscuit         1
1     S002     Lala       beer         4
2     S002     Lala    biscuit         6
3     S003      Jim  chocolate         1
4     S003      Jim       beer         3

Item  Price
0    biscuit     20
1       beer      6
2  chocolate     10

读出的文件和EXCEL中的是一致的。
左边多了一列数字(0,1,2…)是因为在默认情况下,系统会给DataFrame新增index

扩展阅读:除了EXCEL之外,Pandas也可以读取csv,json,html,sas等各种类型的数据。


3.合并数据

类似EXCEL中vlookup函数,在pandas里有merge方法可以把2个表关联到一起,实际比vlookup更强大。
和SQL中JOIN一样,有参数how默认内连接,即取交集。实际包含多个可选值:’left’, ‘right’, ‘outer’, ‘inner’分别代表左连接、右连接、外连接、内连接。
输入[3]:

df= pd.merge(df_order_quantity,df_Item_Price,left_on='Item',right_on='Item')
print(df)

输出[3]:

 Order_NO Customer       Item  Quantity  Price
 0     S001      Jim    biscuit         1     20
 1     S002     Lala    biscuit         6     20
 2     S002     Lala       beer         4      6
 3     S003      Jim       beer         3      6
 4     S003      Jim  chocolate         1     10

扩展阅读:在Pandas中,除了merge函数之外,还有concat函数可以对数据表按行或列进行拼接。


4.数据处理

希望得到 数量(Quantity)*单价(Price)= 总金额(Cumsum_Price),可以使用pandas的列作为向量直接相乘

输入[5]:

df['Cumsum_Price'] = df['Quantity'] * df['Price']
print(df)

输出[5]:

Order_NO Customer       Item  Quantity  Price  Cumsum_Price
0     S001      Jim    biscuit         1     20            20
1     S002     Lala    biscuit         6     20           120
2     S002     Lala       beer         4      6            24
3     S003      Jim       beer         3      6            18
4     S003      Jim  chocolate         1     10            10

可以看到列Cumsum_Price储存了乘积的信息
扩展阅读:在Pandas中,这种列之间计算使用了向量算法,底层使用高度优化过代码,因此速度远快于for循环对单元格进行计算


5.数据透视

我们希望获取人员与Item的汇总金额,有没有类似Excel中数据透视表的方法,答案是肯定有。

输入[6]:

pivot_df =pd.pivot_table(df, values='Cumsum_Price', index=['Customer'], columns=['Item'],aggfunc='sum')
print(pivot_df)

输出[6]:

Item      beer  biscuit  chocolate
Customer                          
Jim       18.0     20.0       10.0
Lala      24.0    120.0        NaN

我们可以看到每个人对产品的购买倾向,当然此例比较简单。
注意有个值是NaN,表示缺失值
扩展阅读: 实际本例也可以不使用数据透视表,而通过分类汇总来实现,也是很常用方法,条条大道通罗马。


6.输出结果

已经有结果了,可以把结果存在EXCEL中
输入[7]:

pivot_df.to_excel("output_pivot.xlsx")

然后会在当前文件夹下,看到一个新的Excel叫output_pivot.xlsx,打开就能看到

Customerbeerbiscuitchocolate
Jim182010
Lala24120

扩展阅读:数据也可以保存在csv,json,html,sas等各种类型的数据。


##结束

此页为空白

Created By:hanpengzhou
Created date: 2020-02-09


##附件1:本样例完整代码:

# %%
import pandas as pd
import numpy as np

df_order_quantity = pd.read_excel("SalesData.xlsx",sheet_name='order_quantity')
df_Item_Price = pd.read_excel("SalesData.xlsx",sheet_name='Item_Price')

# %%
print(df_order_quantity)
print(df_Item_Price)

# %%
df= pd.merge(df_order_quantity,df_Item_Price,left_on='Item',right_on='Item')
print(df)

# %%
df['Cumsum_Price'] = df['Quantity'] * df['Price']
print(df)

# %%
pivot_df =pd.pivot_table(df, values='Cumsum_Price', index=['Customer'], columns=['Item'],aggfunc='sum')
print(pivot_df)

# %%
pivot_df.to_excel("output_pivot.xlsx")

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值