博客
关于我
[Python] Pandas 数据表的处理和数据运算
阅读量:431 次
发布时间:2019-03-06

本文共 8323 字,大约阅读时间需要 27 分钟。

目录

1. 数据表的处理

1.1 转置数据表的行列

>>> import pandas as pd>>> data = pd.read_csv('D:\git\python\code\第5章\产品统计表.csv')>>> 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

1.2 将数据表转换为树形结构

将数据表转换为树形结构就是在维持二维表格的行标签不变的情况下,把列标签也变成行标签,通俗来讲,就是为二维表格建立层次化的索引。

>>> data = pd.read_excel('D:\git\python\code\第5章\产品统计表3.xlsx')>>> print(data)     编号   产品  销售价(元/个)  数量(个)   收入(元)0  a001   背包      65.0   60.0  3900.01  a002   钱包     187.0   50.0  9350.02  a003  单肩包     124.0   58.0  7192.0

用stack()函数将上述数据表转换为树形结构。

>>> print(data.stack())0  编号            a001   产品              背包   销售价(元/个)      65.0   数量(个)         60.0   收入(元)       3900.01  编号            a002   产品              钱包   销售价(元/个)     187.0   数量(个)         50.0   收入(元)       9350.02  编号            a003   产品             单肩包   销售价(元/个)     124.0   数量(个)         58.0   收入(元)       7192.0dtype: object

1.3 数据表的拼接

数据表的拼接是指将两个或多个数据表合并为一个数据表,主要会用到pandas模块中的merge()函数、concat()函数和append()函数。

merge()函数

>>> data1 = pd.read_excel('D:\git\python\code\第5章\产品表.xlsx', sheet_name=0)>>> data2 = pd.read_excel('D:\git\python\code\第5章\产品表.xlsx', sheet_name=1)>>> print(data1)   员工编号 员工姓名 员工性别0  a001   张三    男1  a002   李四    女2  a003   王五    男3  a004   赵六    男>>> print(data2)   员工编号 员工姓名      销售业绩0  a001   张三  360000.01  a002   李四  458000.02  a003   王五  369000.03  a004   赵六  450000.04  a005   钱七  500000.0>>> print(pd.merge(data1,data2))   员工编号 员工姓名 员工性别      销售业绩0  a001   张三    男  360000.01  a002   李四    女  458000.02  a003   王五    男  369000.03  a004   赵六    男  450000.0>>> print(pd.merge(data1,data2,how='outer'))   员工编号 员工姓名 员工性别      销售业绩0  a001   张三    男  360000.01  a002   李四    女  458000.02  a003   王五    男  369000.03  a004   赵六    男  450000.04  a005   钱七  NaN  500000.0

想合并两个表的所有数据,则需要为merge()函数添加参数how,并设置其值为'outer'。

如果两个表中相同的列标签不止一个,可以利用参数on来指定依据哪一列进行合并操作。

>>> print(pd.merge(data1,data2,on='员工编号'))   员工编号 员工姓名_x 员工性别 员工姓名_y      销售业绩0  a001     张三    男     张三  360000.01  a002     李四    女     李四  458000.02  a003     王五    男     王五  369000.03  a004     赵六    男     赵六  450000.0

concat()函数

concat()函数采用的是全连接数据的方式,它可以直接将两个或多个数据表合并,即不需要两表的某些列或索引相同,也可以把数据整合到一起。

>>> print(pd.concat([data1,data2]))   员工编号 员工姓名 员工性别      销售业绩0  a001   张三    男       NaN1  a002   李四    女       NaN2  a003   王五    男       NaN3  a004   赵六    男       NaN0  a001   张三  NaN  360000.01  a002   李四  NaN  458000.02  a003   王五  NaN  369000.03  a004   赵六  NaN  450000.04  a005   钱七  NaN  500000.0

合并后的表中每一行的行标签仍然为原先两个表各自的行标签,如果想要重置行标签,可以在concat()函数中设置参数ignore_index为True。

>>> print(pd.concat([data1,data2], ignore_index=True))   员工编号 员工姓名 员工性别      销售业绩0  a001   张三    男       NaN1  a002   李四    女       NaN2  a003   王五    男       NaN3  a004   赵六    男       NaN4  a001   张三  NaN  360000.05  a002   李四  NaN  458000.06  a003   王五  NaN  369000.07  a004   赵六  NaN  450000.08  a005   钱七  NaN  500000.0

append()函数

append()函数的用法比较简单,它可以直接将一个或多个数据表中的数据合并到其他数据表中。

data1.append(data2)

和 print(pd.concat([data1,data2])) 结果一样

>>> g = data1.append({'员工编号':'a005','员工姓名':'孙七','员工性别':'男'}, ignore_index=True)>>> print(g)   员工编号 员工姓名 员工性别0  a001   张三    男1  a002   李四    女2  a003   王五    男3  a004   赵六    男4  a005   孙七    男

2. 数据的运算

有数据的统计运算、数值分布情况的获取、相关系数的计算、数据的分组汇总、数据透视表的创建。

2.1 数据的统计运算

常见的统计运算包括求和、求平均值、求最值,分别要用到sum()函数、mean()函数、max()函数和min()函数。

求和

>>> data = pd.read_csv('D:\git\python\code\第5章\产品统计表.csv')>>> print(data.sum())编号          a001a002a003a004a005a006a007产品                     背包钱包背包手提包钱包单肩包单肩包成本价(元/个)                             364销售价(元/个)                             899数量(个)                                358成本(元)                              20802收入(元)                              48157利润(元)                              27355dtype: object>>> print(data['利润(元)'].sum())27355

对于非数值数据,运算结果是将它们依次连接得到的一个字符串;对于数值数据,运算结果才是数据之和。

求平均值、求最值

>>> print(data['利润(元)'].mean())3907.8571428571427>>> print(data['利润(元)'].max())>>> data     编号   产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)0  a001   背包        16        65     60    960   3900   29401  a002   钱包        90       187     50   4500   9350   48502  a003   背包        16        65     23    368   1495   11273  a004  手提包        36       147     26    936   3822   28864  a005   钱包        90       187     78   7020  14586   75665  a006  单肩包        58       124     63   3654   7812   41586  a007  单肩包        58       124     58   3364   7192   3828>>> data.min()编号          a001产品           单肩包成本价(元/个)      16销售价(元/个)      65数量(个)         23成本(元)        368收入(元)       1495利润(元)       1127dtype: object

2.2 获取数值分布情况

pandas模块中的describe()函数可以按列获取数据表中所有数值数据的分布情况,包括数据的个数、均值、最值、方差、分位数等。

>>> data.describe()        成本价(元/个)    销售价(元/个)      数量(个)        成本(元)         收入(元)        利润(元)count   7.000000    7.000000   7.000000     7.000000      7.000000     7.000000mean   52.000000  128.428571  51.142857  2971.714286   6879.571429  3907.857143std    31.112698   50.483849  20.053500  2391.447659   4352.763331  2002.194498min    16.000000   65.000000  23.000000   368.000000   1495.000000  1127.00000025%    26.000000   94.500000  38.000000   948.000000   3861.000000  2913.00000050%    58.000000  124.000000  58.000000  3364.000000   7192.000000  3828.00000075%    74.000000  167.000000  61.500000  4077.000000   8581.000000  4504.000000max    90.000000  187.000000  78.000000  7020.000000  14586.000000  7566.000000>>> data['利润(元)'].describe()count       7.000000mean     3907.857143std      2002.194498min      1127.00000025%      2913.00000050%      3828.00000075%      4504.000000max      7566.000000Name: 利润(元), dtype: float64

2.3 计算相关系数

相关系数通常用来衡量两个或多个元素之间的相关程度,使用pandas模块中的corr()函数可以计算相关系数。

>>> data = pd.read_excel('D:\git\python\code\第5章\相关性分析.xlsx')>>> print(data)   代理商编号  年销售额(万元)  年广告费投入额(万元)  成本费用(万元)  管理费用(万元)0  A-001      20.5         15.6      2.00      0.801  A-003      24.5         16.7      2.54      0.942  B-002      31.8         20.4      2.96      0.883  B-006      34.9         22.6      3.02      0.794  B-008      39.4         25.7      3.14      0.845  C-003      44.5         28.8      4.00      0.806  C-004      49.6         32.1      6.84      0.857  C-007      54.8         35.9      5.60      0.918  D-006      58.5         38.7      6.45      0.90>>> data.corr()             年销售额(万元)  年广告费投入额(万元)  成本费用(万元)  管理费用(万元)年销售额(万元)     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

如果只想查看某一列与其他列的相关系数,可以用列标签来指定列。

>>> data.corr()['年销售额(万元)']年销售额(万元)       1.000000年广告费投入额(万元)    0.996275成本费用(万元)       0.914428管理费用(万元)       0.218317Name: 年销售额(万元), dtype: float64

2.4 分组汇总数据

pandas模块中的groupby()函数可以对数据进行分组。

>>> data = pd.read_csv('D:\git\python\code\第5章\产品统计表.csv')>>> data     编号   产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)0  a001   背包        16        65     60    960   3900   29401  a002   钱包        90       187     50   4500   9350   48502  a003   背包        16        65     23    368   1495   11273  a004  手提包        36       147     26    936   3822   28864  a005   钱包        90       187     78   7020  14586   75665  a006  单肩包        58       124     63   3654   7812   41586  a007  单肩包        58       124     58   3364   7192   3828>>> data.groupby('产品')['数量(个)','利润(元)'].sum()     数量(个)  利润(元)产品               单肩包    121   7986手提包     26   2886背包      83   4067钱包     128  12416

2.5 创建数据透视表

数据透视表可对数据表中的数据进行快速分组和计算。pandas模块中的pivot_table()函数可以制作数据透视表。

>>> pd.pivot_table(data, values=['利润(元)','成本(元)'], index='产品', aggfunc='sum')     利润(元)  成本(元)产品               单肩包   7986   7018手提包   2886    936背包    4067   1328钱包   12416  11520>>> pd.pivot_table(data, values=['利润(元)','成本(元)'], index=['产品','编号'], aggfunc='sum')          利润(元)  成本(元)产品  编号                单肩包 a006   4158   3654    a007   3828   3364手提包 a004   2886    936背包  a001   2940    960    a003   1127    368钱包  a002   4850   4500    a005   7566   7020

转载地址:http://kwjuz.baihongyu.com/

你可能感兴趣的文章
MongoDB出现Error parsing command line: unrecognised option ‘--fork‘ 的解决方法
查看>>
mxGraph改变图形大小重置overlay位置
查看>>
MongoDB可视化客户端管理工具之NoSQLbooster4mongo
查看>>
Mongodb学习总结(1)——常用NoSql数据库比较
查看>>
MongoDB学习笔记(8)--索引及优化索引
查看>>
mongodb定时备份数据库
查看>>
mppt算法详解-ChatGPT4o作答
查看>>
mpvue的使用(一)必要的开发环境
查看>>
MQ 重复消费如何解决?
查看>>
mqtt broker服务端
查看>>
MQTT 保留消息
查看>>
MQTT 持久会话与 Clean Session 详解
查看>>
MQTT工作笔记0007---剩余长度
查看>>
MQTT工作笔记0009---订阅主题和订阅确认
查看>>
Mqtt搭建代理服务器进行通信-浅析
查看>>
MS Edge浏览器“STATUS_INVALID_IMAGE_HASH“兼容性问题
查看>>
ms sql server 2008 sp2更新异常
查看>>
MS UC 2013-0-Prepare Tool
查看>>
MSBuild 教程(2)
查看>>
msbuild发布web应用程序
查看>>