轩小陌的Python笔记-Pandas 高级数据处理

Pandas 高级数据处理

一、级联

pd.concat(objs, axis=1, verify_integrity=False, keys, ignore_index=False, sort=False, join=‘outer’)

  • 级联语法的核心就是索引对齐

  • 级联的应用场景:不同期,但是结构相同的数据汇总

  • objs:列表/元组

  • axis = 0 列索引对齐, axis=1 行索引对齐

df1 = pd.DataFrame(data=[[1,2,3]], columns=list('ABC'))
df2 = pd.DataFrame(data=[[2,3,4]], columns=list('ABC'))

res2 = pd.concat([df1, df2], axis=1)
print(res2)
>>输出结果:
	A	B	C	A	B	C
0	1	2	3	2	3	4

# 校验级联之后是否有重复索引
pd.concat((df1, df2), axis=1, verify_integrity=True)

# 通过多层级索引来处理重复索引的问题
pd.concat((df1, df2), axis=1, keys=['上半年','下半年'],names=['周期','产品'])
>>输出结果:
周期	  上半年	    下半年
产品	A	B	C	A	B	C
0	 1	 2	 3	 2	 3	 4

# 通过忽略索引的方式来处理重复索引的问题
pd.concat((df1, df2), ignore_index=True)
>>输出结果:
	A	B	C
0	1	2	3
1	2	3	4


df3 = pd.DataFrame(data=[[1,2,3,4]], columns=list('CDAB'))
pd.concat((df3, df2))
>>输出结果:
	A	B	C	D
0	3	4	1	2.0
0	2	3	4	NaN


# outer:保留级联方向的所有标签(并集),innert:保留级联方向的共有标签(交集)
df4 = pd.DataFrame(data=np.random.randint(0, 100, size=(3,4)), columns=list('ABCD'))
print(df4)
>>输出结果:
	A	B	C	D
0	82	20	46	14
1	51	14	31	47
2	23	18	47	38
df5 = pd.DataFrame(data=np.random.randint(-100, 0, size=(4,3)), columns=list('BDE'))
print(df5)
>>输出结果:
	B	D	E
0	-18	-1	-5
1	-32	-19	-73
2	-63	-20	-73
3	-15	-45	-61

pd.concat((df4, df5, df1), sort=True, join='outer')
>>输出结果:
	A		B	C		D		E
0	82.0	20	46.0	14.0	NaN
1	51.0	14	31.0	47.0	NaN
2	23.0	18	47.0	38.0	NaN
0	NaN		-18	NaN		-1.0	-5.0
1	NaN		-32	NaN		-19.0	-73.0
2	NaN		-63	NaN		-20.0	-73.0
3	NaN		-15	NaN		-45.0	-61.0
0	1.0		2	3.0		NaN		NaN

二、合并

  • 合并就是根据两张表的公共信息,把两张表的数据汇总的方法。

  • 合并以列的内容为参考标准,不存在行合并,都是列合并。

  • 合并的列通常是离散型数据。可以是数值型。

  • 合并的列之间存在一对一、一对多、多对多关系,否则合并结果为空。

案例

first_half_year = pd.read_excel('合并表格案例.xlsx', sheet_name=0)
first_half_year.head()
>>输出结果:
	用户ID   商品ID	 订单ID  购买数量
0	lucy	10001	1009	1
1	jack	10002	1002	2
2	lucy	10003	1007	1
3	alex	10004	1010	1
4	mery	10005	1008	1

second_half_year = pd.read_excel('合并表格案例.xlsx', sheet_name=1)
second_half_year.head()
>>输出结果:
	用户ID	  商品ID	 订单ID  购买数量
0	tom			10006	2001	1
1	oldshang	10003	2002	1
2	小陌		   10004   2003	   1
3	小明		   10004   2004	   2
4	小红		   10001   2005	   1

user_table = pd.read_excel('合并表格案例.xlsx', sheet_name=2)
user_table.head()
>>输出结果:
	用户ID   地区	VIP等级	手机号
0	lucy	北京		3	 13054344433
1	智哥	   深圳	   3	13046798795
2	mery	北京		2	 17877659878
3	jack	上海		4	 18635482221
4	alex	北京		1	 17601002323

product_table = pd.read_excel('合并表格案例.xlsx', sheet_name=3)
product_table.head()
>>输出结果:
	商品ID	商品类别	商品品牌	商品单价
0	10001	  笔记本		华为		8000
1	10002	  笔记本		小米		7600
2	10003	  鼠标		华为		 300
3	10004	  鼠标		apple	  600
4	10005	  键盘		apple	  1000

return_table = pd.read_excel('合并表格案例.xlsx', sheet_name=4)
return_table.head()
>>输出结果:
	订单_id	退货状态
0	1003	  退货中
1	1004	  退货中
2	1005	  退货完成
3	1011	  退货完成
4	1014	  退货中
  1. 计算上半年订单总额GMV
# 两张表合并时,默认是根据所有的相同字段名称的列来进行合并
res1 = pd.merge(left=first_half_year, right=product_table)
>>输出结果:
	用户ID	商品ID	订单ID	购买数量	商品类别	商品品牌	商品单价
0	lucy	 10001		1009	   1		笔记本		华为		  8000
1	tom		 10001		1011	   1		笔记本		华为		  8000
2	jack	 10002		1002	   2		笔记本		小米		  7600
3	小陌	    10002	   1013	   	 1		   笔记本	   小米		 7600
4	alex	 10002		1001	   
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值