pandas的多表连接

大家好,我是派森酱。

前天一个女同事找我帮忙,说有上百个表格需要合并到一起,我一看,都是相同表头的表格,这不是so easy吗,快速搞定​,妹子拿到结果很高兴。

​之前咱们讲过pandas的两表连接merge:可以按条件匹配数据,自动合并列名相同的列;

轴向连接concat:可以左右连接,也可以上下连接,相同的内容自动合并;

这次我用的是pandas的另一个多表连接append

功能说明

pandasappend要求表的表头要一致才行,但是不会限制表的个数。

准备数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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)来连接相同表头的两表

比如:

1
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

1
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来重置索引

1
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来填补空值

用使用场景

有两张表leftright,一般要求它们的表格结构一致,数据量也一致,使用right的数据去填补left的数据缺漏。如果在同一位置leftright数据不一致,保留left的数据

设置空值数据

1
2
3
4
5
6
7
8
9
10
11
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]
})

填补数据

1
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的各种表的连接功能,我们能快速的将多个表合并到一起,来快速处理我们的数据。

今天就讲到这了,酱友们有其它想学习的功能和建议,可以留言给我,我们一起学习一起进步。

Python Geek Tech wechat
欢迎订阅 Python 技术,这里分享关于 Python 的一切。