Python数据分析(3):pandas(下)

简介: Python数据分析(3):pandas

3.2.5 排序数据:sort_values()、rank()


1. sort_values()


import pandas as pd
data = pd.read_excel('产品统计表2.xlsx')
a = data.sort_values(by = '数量(个)', ascending = True) #第一个参数指定列  第二个参数指定升序
print(a)


     编号   产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
2  a003   背包        16        65     23    368   1495   1127
3  a004  手提包        36       147     26    936   3822   2886
4  a004  手提包        36       147     26    936   3822   2886
1  a002   钱包        90       187     50   4500   9350   4850
0  a001   背包        16        65     60    960   3900   2940
6  a006  单肩包        58       124     63   3654   7812   4158
5  a005   钱包        90       187     78   7020  14586   7566


例:降序如下


b = data.sort_values(by = '数量(个)', ascending = False)
print(b)


     编号   产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
5  a005   钱包        90       187     78   7020  14586   7566
6  a006  单肩包        58       124     63   3654   7812   4158
0  a001   背包        16        65     60    960   3900   2940
1  a002   钱包        90       187     50   4500   9350   4850
3  a004  手提包        36       147     26    936   3822   2886
4  a004  手提包        36       147     26    936   3822   2886
2  a003   背包        16        65     23    368   1495   1127


2. rank()


c = data['利润(元)'].rank(method = 'average', ascending = False)  #指定利润降序排序  有重复值则返回重复值的平均排名
print(c)


0    4.0
1    2.0
2    7.0
3    5.5
4    5.5
5    1.0
6    3.0
Name: 利润(元), dtype: float64


参数指定first时,表示在数据有重复值时,越先出现的数据排名越靠前


d = data['利润(元)'].rank(method = 'first', ascending = False)
print(d)


0    4.0
1    2.0
2    7.0
3    5.0
4    6.0
5    1.0
6    3.0
Name: 利润(元), dtype: float64


3.2.6 筛选数据


获取产品为单肩包的行数据


import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
a = data[data['产品'] == '单肩包']   #获取产品为单肩包的行数据
print(a)


     编号   产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
5  a006  单肩包        58       124     63   3654   7812   4158
6  a007  单肩包        58       124     58   3364   7192   3828


获取数量>60的行数据


b = data[data['数量(个)'] > 60]  # 获取数量>60的行数据
print(b)


     编号   产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
4  a005   钱包        90       187     78   7020  14586   7566
5  a006  单肩包        58       124     63   3654   7812   4158


获取产品为单肩包 且 数量>60 的行数据


c = data[(data['产品'] == '单肩包') & (data['数量(个)'] > 60)]
print(c)


     编号   产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
5  a006  单肩包        58       124     63   3654   7812   4158


获取产品为单肩包 或 数量>60 的行数据


d = data[(data['产品'] == '单肩包') | (data['数量(个)'] > 60)]
print(d)


     编号   产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
4  a005   钱包        90       187     78   7020  14586   7566
5  a006  单肩包        58       124     63   3654   7812   4158
6  a007  单肩包        58       124     58   3364   7192   3828


3.3 数据表的处理


3.3.1 转置表的行列:T


import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
a = data.T
print(a)


             0     1     2     3      4     5     6
编号        a001  a002  a003  a004   a005  a006  a007
产品          背包    钱包    背包   手提包     钱包   单肩包   单肩包
成本价(元/个)    16    90    16    36     90    58    58
销售价(元/个)    65   187    65   147    187   124   124
数量(个)       60    50    23    26     78    63    58
成本(元)      960  4500   368   936   7020  3654  3364
收入(元)     3900  9350  1495  3822  14586  7812  7192
利润(元)     2940  4850  1127  2886   7566  4158  3828


3.3.2 将表转换成树形结构:stack()


     编号   产品  销售价(元/个)  数量(个)  收入(元)
0  a001   背包        65     60   3900
1  a002   钱包       187     50   9350
2  a003  单肩包       124     58   7192


例:stack()函数转换成树形结构


a = data.stack()
print(a)


0  编号          a001
   产品            背包
   销售价(元/个)      65
   数量(个)         60
   收入(元)       3900
1  编号          a002
   产品            钱包
   销售价(元/个)     187
   数量(个)         50
   收入(元)       9350
2  编号          a003
   产品           单肩包
   销售价(元/个)     124
   数量(个)         58
   收入(元)       7192
dtype: object


3.3.3 表的拼接:merge()、concat()、append()


import pandas as pd
data1 = pd.read_excel('产品表.xlsx', sheet_name = 0)  #第0张工作簿
data2 = pd.read_excel('产品表.xlsx',sheet_name = 1)   #第1张工作簿
print(data1)
print(data2)


   员工编号 员工姓名 员工性别
0  a001   张三    男
1  a002   李四    女
2  a003   王五    男
3  a004   赵六    男
   员工编号 员工姓名    销售业绩
0  a001   张三  360000
1  a002   李四  458000
2  a003   王五  369000
3  a004   赵六  450000
4  a005   钱七  500000


1. merge()


a = pd.merge(data1, data2)  #行取交集  列取并集
print(a)


   员工编号 员工姓名 员工性别    销售业绩
0  a001   张三    男  360000
1  a002   李四    女  458000
2  a003   王五    男  369000
3  a004   赵六    男  450000


how参数指定外连接


b = pd.merge(data1, data2, how = 'outer')    #行取并集  列取并集
print(b)


   员工编号 员工姓名 员工性别    销售业绩
0  a001   张三    男  360000
1  a002   李四    女  458000
2  a003   王五    男  369000
3  a004   赵六    男  450000
4  a005   钱七  NaN  500000


on参数指定按哪一列合并


c = pd.merge(data1, data2, on = '员工姓名')
print(c)


  员工编号_x 员工姓名 员工性别 员工编号_y    销售业绩
0   a001   张三    男   a001  360000
1   a002   李四    女   a002  458000
2   a003   王五    男   a003  369000
3   a004   赵六    男   a004  450000


2. concat()


concat()函数采用全连接的方式,没有的数设置为缺失值


d = pd.concat([data1, data2])
print(d)


   员工编号 员工姓名 员工性别      销售业绩
0  a001   张三    男       NaN
1  a002   李四    女       NaN
2  a003   王五    男       NaN
3  a004   赵六    男       NaN
0  a001   张三  NaN  360000.0
1  a002   李四  NaN  458000.0
2  a003   王五  NaN  369000.0
3  a004   赵六  NaN  450000.0
4  a005   钱七  NaN  500000.0


重置行标签


e = pd.concat([data1, data2], ignore_index = True)  #重置行标签
print(e)


   员工编号 员工姓名 员工性别      销售业绩
0  a001   张三    男       NaN
1  a002   李四    女       NaN
2  a003   王五    男       NaN
3  a004   赵六    男       NaN
4  a001   张三  NaN  360000.0
5  a002   李四  NaN  458000.0
6  a003   王五  NaN  369000.0
7  a004   赵六  NaN  450000.0
8  a005   钱七  NaN  500000.0


3. append()


效果与concat()全连接一样


f = data1.append(data2)
print(f)


   员工编号 员工姓名 员工性别      销售业绩
0  a001   张三    男       NaN
1  a002   李四    女       NaN
2  a003   王五    男       NaN
3  a004   赵六    男       NaN
0  a001   张三  NaN  360000.0
1  a002   李四  NaN  458000.0
2  a003   王五  NaN  369000.0
3  a004   赵六  NaN  450000.0
4  a005   钱七  NaN  500000.0


末尾添加行元素


g = data1.append({'员工编号':'a005', '员工姓名':'孙七', '员工性别':'男'}, ignore_index = True)
print(g)


   员工编号 员工姓名 员工性别
0  a001   张三    男
1  a002   李四    女
2  a003   王五    男
3  a004   赵六    男
4  a005   孙七    男


3.4 数据的运算


3.4.1 统计运算:sum()、mean()、max()


1. 求和:sum()


import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
a = data.sum()  # 每一列求和
print(a)


编号          a001a002a003a004a005a006a007
产品                     背包钱包背包手提包钱包单肩包单肩包
成本价(元/个)                             364
销售价(元/个)                             899
数量(个)                                358
成本(元)                              20802
收入(元)                              48157
利润(元)                              27355
dtype: object


例:指定列求和


b = data['利润(元)'].sum()
print(b)


27355


2. 求平均值:mean()


c = data.mean() #每一列求平均值
print(c)


成本价(元/个)      52.000000
销售价(元/个)     128.428571
数量(个)         51.142857
成本(元)       2971.714286
收入(元)       6879.571429
利润(元)       3907.857143
dtype: float64


例:指定列求均值


d = data['利润(元)'].mean()
print(d)


3907.8571428571427


3. 求最值:max()


e = data.max()
print(e)


编号           a007
产品             钱包
成本价(元/个)       90
销售价(元/个)      187
数量(个)          78
成本(元)        7020
收入(元)       14586
利润(元)        7566
dtype: object


例:指定列求最值


f = data['利润(元)'].max()
print(f)


7566


3.4.2 获取数值分布情况:describe()


import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
a = data.describe()
print(a)


        成本价(元/个)    销售价(元/个)      数量(个)        成本(元)         收入(元)        利润(元)
count   7.000000    7.000000   7.000000     7.000000      7.000000     7.000000
mean   52.000000  128.428571  51.142857  2971.714286   6879.571429  3907.857143
std    31.112698   50.483849  20.053500  2391.447659   4352.763331  2002.194498
min    16.000000   65.000000  23.000000   368.000000   1495.000000  1127.000000
25%    26.000000   94.500000  38.000000   948.000000   3861.000000  2913.000000
50%    58.000000  124.000000  58.000000  3364.000000   7192.000000  3828.000000
75%    74.000000  167.000000  61.500000  4077.000000   8581.000000  4504.000000
max    90.000000  187.000000  78.000000  7020.000000  14586.000000  7566.000000


例:获取单列的情况


b = data['利润(元)'].describe()
print(b)


count       7.000000
mean     3907.857143
std      2002.194498
min      1127.000000
25%      2913.000000
50%      3828.000000
75%      4504.000000
max      7566.000000
Name: 利润(元), dtype: float64


3.4.3 计算相关系数:corr()


import pandas as pd
data = pd.read_excel('相关性分析.xlsx')
print(data)


   代理商编号  年销售额(万元)  年广告费投入额(万元)  成本费用(万元)  管理费用(万元)
0  A-001      20.5         15.6      2.00      0.80
1  A-003      24.5         16.7      2.54      0.94
2  B-002      31.8         20.4      2.96      0.88
3  B-006      34.9         22.6      3.02      0.79
4  B-008      39.4         25.7      3.14      0.84
5  C-003      44.5         28.8      4.00      0.80
6  C-004      49.6         32.1      6.84      0.85
7  C-007      54.8         35.9      5.60      0.91
8  D-006      58.5         38.7      6.45      0.90


corr()函数获取相关系数


a = data.corr()
print(a)


             年销售额(万元)  年广告费投入额(万元)  成本费用(万元)  管理费用(万元)
年销售额(万元)     1.000000     0.996275  0.914428  0.218317
年广告费投入额(万元)  0.996275     1.000000  0.918404  0.223187
成本费用(万元)     0.914428     0.918404  1.000000  0.284286
管理费用(万元)     0.218317     0.223187  0.284286  1.000000


例:获取指定列与其他列的相关系数


b = data.corr()['年销售额(万元)']
print(b)


年销售额(万元)       1.000000
年广告费投入额(万元)    0.996275
成本费用(万元)       0.914428
管理费用(万元)       0.218317
Name: 年销售额(万元), dtype: float64


3.4.4 分组汇总数据:groupby()



import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
a = data.groupby('产品')    #根据产品列分组
print(a)


<pandas.core.groupby.generic.DataFrameGroupBy object at 0x00000213943E4640>


groupby()函数返回的是一个DataFrameBy对象,该对象包含分组后的数据,但是不能直观地显示出来。


b = data.groupby('产品').sum()
print(b)


     成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
产品                                                 
单肩包       116       248    121   7018  15004   7986
手提包        36       147     26    936   3822   2886
背包         32       130     83   1328   5395   4067
钱包        180       374    128  11520  23936  12416


分组后获取指定列的汇总情况


c = data.groupby('产品')['利润(元)'].sum()
print(c)


产品
单肩包     7986
手提包     2886
背包      4067
钱包     12416
Name: 利润(元), dtype: int64


获取多列的汇总情况


d = data.groupby('产品')['数量(个)', '利润(元)'].sum()
print(d)


     数量(个)  利润(元)
产品               
单肩包    121   7986
手提包     26   2886
背包      83   4067
钱包     128  12416


3.4.5 创建数据透视表:pivot_table()


  • values参数用于指定要计算的列


  • index参数用于指定一个列作为数据透视表的行标签


  • aggfunc参数用于指定参数values的计算类型


import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
a = pd.pivot_table(data, values = '利润(元)', index = '产品', aggfunc = 'sum')  #data.groupby('产品')['利润(元)'].sum()  同样功能
print(a)


     利润(元)
产品        
单肩包   7986
手提包   2886
背包    4067
钱包   12416


获取多列的情况


b = pd.pivot_table(data, values = ['利润(元)', '成本(元)'], index = '产品', aggfunc = 'sum')
print(b)


     利润(元)  成本(元)
产品               
单肩包   7986   7018
手提包   2886    936
背包    4067   1328
钱包   12416  11520
目录
相关文章
|
10天前
|
数据采集 数据可视化 数据挖掘
Pandas数据应用:天气数据分析
本文介绍如何使用 Pandas 进行天气数据分析。Pandas 是一个强大的 Python 数据处理库,适合处理表格型数据。文章涵盖加载天气数据、处理缺失值、转换数据类型、时间序列分析(如滚动平均和重采样)等内容,并解决常见报错如 SettingWithCopyWarning、KeyError 和 TypeError。通过这些方法,帮助用户更好地进行气候趋势预测和决策。
108 71
|
1月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
本文将引导读者了解如何使用Python进行数据分析,从安装必要的库到执行基础的数据操作和可视化。通过本文的学习,你将能够开始自己的数据分析之旅,并掌握如何利用Python来揭示数据背后的故事。
|
2月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
【10月更文挑战第42天】本文是一篇技术性文章,旨在为初学者提供一份关于如何使用Python进行数据分析的入门指南。我们将从安装必要的工具开始,然后逐步介绍如何导入数据、处理数据、进行数据可视化以及建立预测模型。本文的目标是帮助读者理解数据分析的基本步骤和方法,并通过实际的代码示例来加深理解。
73 3
|
9天前
|
存储 数据采集 数据可视化
Pandas数据应用:电子商务数据分析
本文介绍如何使用 Pandas 进行电子商务数据分析,涵盖数据加载、清洗、预处理、分析与可视化。通过 `read_csv` 等函数加载数据,利用 `info()` 和 `describe()` 探索数据结构和统计信息。针对常见问题如缺失值、重复记录、异常值等,提供解决方案,如 `dropna()`、`drop_duplicates()` 和正则表达式处理。结合 Matplotlib 等库实现数据可视化,探讨内存不足和性能瓶颈的应对方法,并总结常见报错及解决策略,帮助提升电商企业的数据分析能力。
107 73
|
6天前
|
存储 数据采集 数据可视化
Pandas数据应用:医疗数据分析
Pandas是Python中强大的数据操作和分析库,广泛应用于医疗数据分析。本文介绍了使用Pandas进行医疗数据分析的常见问题及解决方案,涵盖数据导入、预处理、清洗、转换、可视化等方面。通过解决文件路径错误、编码不匹配、缺失值处理、异常值识别、分类变量编码等问题,结合Matplotlib等工具实现数据可视化,并提供了解决常见报错的方法。掌握这些技巧可以提高医疗数据分析的效率和准确性。
49 22
|
11天前
|
数据采集 数据可视化 索引
Pandas数据应用:股票数据分析
本文介绍了如何使用Pandas库进行股票数据分析。首先,通过pip安装并导入Pandas库。接着,从本地CSV文件读取股票数据,并解决常见的解析错误。然后,利用head()、info()等函数查看数据基本信息,进行数据清洗,处理缺失值和重复数据。再者,结合Matplotlib和Seaborn进行数据可视化,绘制收盘价折线图。最后,进行时间序列分析,设置日期索引、重采样和计算移动平均线。通过这些步骤,帮助读者掌握Pandas在股票数据分析中的应用。
44 5
|
2月前
|
机器学习/深度学习 算法 数据挖掘
数据分析的 10 个最佳 Python 库
数据分析的 10 个最佳 Python 库
105 4
数据分析的 10 个最佳 Python 库
|
2月前
|
存储 数据可视化 数据挖掘
使用Python进行数据分析和可视化
本文将引导你理解如何使用Python进行数据分析和可视化。我们将从基础的数据结构开始,逐步深入到数据处理和分析的方法,最后通过实际的代码示例来展示如何创建直观的数据可视化。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。让我们一起探索数据的世界,发现隐藏在数字背后的故事!
|
2月前
|
存储 数据可视化 数据挖掘
Python数据分析项目:抖音短视频达人粉丝增长趋势
Python数据分析项目:抖音短视频达人粉丝增长趋势
|
2月前
|
数据采集 存储 数据可视化
Python数据分析:揭秘"黑神话:悟空"Steam用户评论趋势
Python数据分析:揭秘"黑神话:悟空"Steam用户评论趋势
下一篇
开通oss服务