大家好,我是派森酱。
前天一个女同事找我帮忙,说有上百个表格需要合并到一起,我一看,都是相同表头的表格,这不是so easy吗,快速搞定,妹子拿到结果很高兴。
之前咱们讲过pandas
的两表连接merge
:可以按条件匹配数据,自动合并列名相同的列;
轴向连接concat
:可以左右连接,也可以上下连接,相同的内容自动合并;
这次我用的是
pandas
的另一个多表连接append
。
pandas
的append
要求表的表头要一致才行,但是不会限制表的个数。
- import pandas as pd
-
- df1 = pd.DataFrame({
- 'a': [1, 2, 3],
- 'b': [0, 9, 8],
- 'c': [7, 4, 1]
- })
-
- df2 = pd.DataFrame({
- 'a': [4, 1, 2],
- 'b': [5, 0, 9],
- 'c': [6, 7, 4]
- })
-
- df3 = pd.DataFrame({
- 'a': [0, 1, 2],
- 'b': [2, 0, 9],
- 'c': [3, 7, 4]
- })
可以用df.append(df1)
来连接相同表头的两表
比如:
df = df1.append(df2)
输出:
- a b c
- 0 1 0 7
- 1 2 9 4
- 2 3 8 1
- 0 4 5 6
- 1 1 0 7
- 2 2 9 4
df.append(df1)
只是个用法,一定要用一个变量去赋值才行哟,要不然会没有变化。
那么怎么多表连接呢,很简单,就是在后面不停的加append
df = df1.append(df2).append(df3)
输出:
- a b c
- 0 1 0 7
- 1 2 9 4
- 2 3 8 1
- 0 4 5 6
- 1 1 0 7
- 2 2 9 4
- 0 0 2 3
- 1 1 0 7
- 2 2 9 4
看,是不是简单。其实pandas的很多功能都很简单好用,只要知道了用法,都很强大的。
上面的多表虽然连接好了,但是索引确是各自表的索引,很多都是重复的,如果有需要用索引操作内容的话,会把相同索引的内容都改掉,那么我们就需要重置索引:
可以用ignore_index=True
来重置索引
df = df1.append(df2).append(df3, ignore_index=True)
输出:
- a b c
- 0 1 0 7
- 1 2 9 4
- 2 3 8 1
- 3 4 5 6
- 4 1 0 7
- 5 2 9 4
- 6 0 2 3
- 7 1 0 7
- 8 2 9 4
索引都被重置了
同样的有时候各表的内容会有空值的怎么办呢?
可以用combin_first
来填补空值
有两张表left
和right
,一般要求它们的表格结构一致,数据量也一致,使用right
的数据去填补left
的数据缺漏。如果在同一位置left
与right
数据不一致,保留left
的数据
- df1 = pd.DataFrame({
- 'a': [1, 2, 3],
- 'b': [nan, 9, 8],
- 'c': [nan, 4, 1]
- })
-
- df2 = pd.DataFrame({
- 'a': [4, nan, 2],
- 'b': [5, 0, 9],
- 'c': [6, nan, 4]
- })
df = df1.combine_first(df2)
输出:
- a b c
- 0 1.0 5.0 6.0
- 1 2.0 9.0 4.0
- 2 3.0 8.0 1.0
空值都被填补了,df1
少的被df2
的值填补,相同位置不同的值保留df1
的值
根据pandas
的各种表的连接功能,我们能快速的将多个表合并到一起,来快速处理我们的数据。
今天就讲到这了,酱友们有其它想学习的功能和建议,可以留言给我,我们一起学习一起进步。