一.转置数据表的行列
描述
数据转置就是将数据表的行数据转换到列方向上,将列数据转换到行方向上
用法和参数
DataFrame.T
实例
import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
print(data)
'''
编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
0 a001 背包 16 65 60 960 3900 2940
1 a002 钱包 90 187 50 4500 9350 4850
2 a003 背包 16 65 23 368 1495 1127
3 a004 手提包 36 147 26 936 3822 2886
4 a005 钱包 90 187 78 7020 14586 7566
5 a006 单肩包 58 124 63 3654 7812 4158
6 a007 单肩包 58 124 58 3364 7192 3828
'''
print(data.T)
'''
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
'''
二.将数据表转换为树形形状
描述
将数据表转换为树形结构就是在维持二维表格的行标签不变的情况下,把列标签也变成行标签,通俗点讲,就是为二维表格建立层次化的索引
用法和参数
DataFrame.stack()
实例
import pandas as pd
data = pd.read_excel('产品统计表3.xlsx')
print(data)
'''
编号 产品 销售价(元/个) 数量(个) 收入(元)
0 a001 背包 65 60 3900
1 a002 钱包 187 50 9350
2 a003 单肩包 124 58 7192
'''
print(data.stack())
'''
0 编号 a001
产品 背包
销售价(元/个) 65
数量(个) 60
收入(元) 3900
1 编号 a002
产品 钱包
销售价(元/个) 187
数量(个) 50
收入(元) 9350
2 编号 a003
产品 单肩包
销售价(元/个) 124
数量(个) 58
收入(元) 7192
dtype: object
'''
三.数据表的拼接
描述
- merge()函数可以根据一个或多个相同的列将不同数据表的行连接起来
- concat()函数采用的是全连接数据的方式,他可以直接将两个或多个数据表合并,即不需要两表的某些列或索引相同,也可以把数据整合到一起
- append()函数可以直接将一个或多个数据表中的数据合并到其他数据表中
语法和参数
- pandas.merge(left, right, how=‘inner’, on=None)
- left:合并的第一个数据表
- right:合并的第二个数据表
- how:取值为inner或outer,默认为inner
- inner:合并两个数据表中共有的数据
- outer:合并两个数据表中所有的数据
- on:指定一句哪一列进行合并操作
- pandas.concat(objs, ignore_index=False)
- objs:要合并的数据表
- ignore_index:重置行标签
- DataFrame.append(obj, ignore_index=True)
- obj:要添加的数据
- ignore_index:是否重置序号
实例
import pandas as pd
data1 = pd.read_excel('产品表.xlsx', sheet_name=0)
data2 = pd.read_excel('产品表.xlsx', sheet_name=1)
print(data1)
'''
员工编号 员工姓名 员工性别
0 a001 张三 男
1 a002 李四 女
2 a003 王五 男
3 a004 赵六 男
'''
print(data2)
'''
员工编号 员工姓名 销售业绩
0 a001 张三 360000
1 a002 李四 458000
2 a003 王五 369000
3 a004 赵六 450000
4 a005 钱七 500000
'''
# 连接两个数据表
print(pd.merge(data1, data2))
'''
员工编号 员工姓名 员工性别 销售业绩
0 a001 张三 男 360000
1 a002 李四 女 458000
2 a003 王五 男 369000
3 a004 赵六 男 450000
'''
print(pd.merge(data1, data2, how='outer'))
'''
员工编号 员工姓名 员工性别 销售业绩
0 a001 张三 男 360000
1 a002 李四 女 458000
2 a003 王五 男 369000
3 a004 赵六 男 450000
4 a005 钱七 NaN 500000
'''
# 按照员工姓名连接两个数据表
print(pd.merge(data1, data2, on='员工姓名'))
'''
员工编号_x 员工姓名 员工性别 员工编号_y 销售业绩
0 a001 张三 男 a001 360000
1 a002 李四 女 a002 458000
2 a003 王五 男 a003 369000
3 a004 赵六 男 a004 450000
'''
# 采用全连接的方式连接两个数据表
print(pd.concat([data1, data2]))
'''
员工编号 员工姓名 员工性别 销售业绩
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
'''
# 连接两个数据表,并且重置行标签
print(pd.concat([data1, data2], ignore_index=True))
'''
员工编号 员工姓名 员工性别 销售业绩
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
'''
# 把数据表2合并到数据表1中
print(data1.append(data2))
'''
员工编号 员工姓名 员工性别 销售业绩
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
'''
print(data1.append(
{"员工编号": 'a005', '员工姓名': '孙七', '员工性别': '男'}, ignore_index=True
))
'''
员工编号 员工姓名 员工性别
0 a001 张三 男
1 a002 李四 女
2 a003 王五 男
3 a004 赵六 男
4 a005 孙七 男
'''