我是靠谱客的博主 俏皮溪流,这篇文章主要介绍03_10Pandas_数据合并concat,现在分享给大家,希望可以做个参考。

注意concat与merge的区别,concat是沿轴方向将多个对象合并到一起。

numpy 和 pandas里都有实现concat的函数与功能。

复制代码
1
2
import numpy as np import pandas as pd

NumPy的concat

复制代码
1
2
3
4
5
# 创建两个DataFrame arr1 = np.random.randint(0, 10, (3, 4)) arr2 = np.random.randint(0, 10, (3, 4)) print arr1 print arr2
复制代码
1
2
3
4
5
6
7
[[6 5 2 1] [9 4 2 0] [1 6 0 2]] [[3 8 1 5] [3 2 1 9] [2 8 4 8]]
复制代码
1
2
# 调用.concatenate, 并将两个ndarray组成list传入,默认是纵向合并 print np.concatenate([arr1, arr2])
复制代码
1
2
3
4
5
6
7
[[6 5 2 1] [9 4 2 0] [1 6 0 2] [3 8 1 5] [3 2 1 9] [2 8 4 8]]
复制代码
1
2
# 指定轴方向,axis=1时是横向合并 print np.concatenate([arr1, arr2], axis=1)
复制代码
1
2
3
4
[[6 5 2 1 3 8 1 5] [9 4 2 0 3 2 1 9] [1 6 0 2 2 8 4 8]]

Series上的concat

index 没有重复的情况

复制代码
1
2
3
4
5
6
7
# index 没有重复的情况 ser_obj1 = pd.Series(np.random.randint(0, 10, 5), index=range(0,5)) ser_obj2 = pd.Series(np.random.randint(0, 10, 4), index=range(5,9)) ser_obj3 = pd.Series(np.random.randint(0, 10, 3), index=range(9,12)) print ser_obj1 print ser_obj2 print ser_obj3
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
0 9 1 8 2 8 3 0 4 1 dtype: int64 5 7 6 5 7 8 8 0 dtype: int64 9 1 10 7 11 7 dtype: int64
复制代码
1
2
# 调用.concat,并将两个DataFrame组成list传入,默认纵向合并 pd.concat([ser_obj1, ser_obj2, ser_obj3])
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
0 9 1 8 2 8 3 0 4 1 5 7 6 5 7 8 8 0 9 1 10 7 11 7 dtype: int64
复制代码
1
2
# 设置为横向合并 print pd.concat([ser_obj1, ser_obj2, ser_obj3], axis=1)
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
0 1 2 0 9.0 NaN NaN 1 8.0 NaN NaN 2 8.0 NaN NaN 3 0.0 NaN NaN 4 1.0 NaN NaN 5 NaN 7.0 NaN 6 NaN 5.0 NaN 7 NaN 8.0 NaN 8 NaN 0.0 NaN 9 NaN NaN 1.0 10 NaN NaN 7.0 11 NaN NaN 7.0

index 有重复的情况

复制代码
1
2
3
4
5
6
7
# index 有重复的情况 ser_obj1 = pd.Series(np.random.randint(0, 10, 5), index=range(5)) ser_obj2 = pd.Series(np.random.randint(0, 10, 4), index=range(4)) ser_obj3 = pd.Series(np.random.randint(0, 10, 3), index=range(3)) print ser_obj1 print ser_obj2 print ser_obj3
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
0 7 1 4 2 5 3 1 4 8 dtype: int64 0 3 1 6 2 8 3 2 dtype: int64 0 9 1 1 2 8 dtype: int64
复制代码
1
2
# 合并后索引保持不变 print pd.concat([ser_obj1, ser_obj2, ser_obj3])
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
0 7 1 4 2 5 3 1 4 8 0 3 1 6 2 8 3 2 0 9 1 1 2 8 dtype: int64
复制代码
1
2
# 相当于多个Series的内链接 print pd.concat([ser_obj1, ser_obj2, ser_obj3], axis=1, join='inner')
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
0 1 2 0 7 3 9 1 4 6 1 2 5 8 8

DataFrame上的concat

复制代码
1
2
3
4
5
6
df_obj1 = pd.DataFrame(np.random.randint(0, 10, (3, 2)), index=['a', 'b', 'c'], columns=['A', 'B']) df_obj2 = pd.DataFrame(np.random.randint(0, 10, (2, 2)), index=['a', 'b'], columns=['C', 'D']) print df_obj1 print df_obj2
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
A B a 2 0 b 5 0 c 4 9 C D a 4 7 b 9 9
复制代码
1
print pd.concat([df_obj1, df_obj2])
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
A B C D a 2.0 0.0 NaN NaN b 5.0 0.0 NaN NaN c 4.0 9.0 NaN NaN a NaN NaN 4.0 7.0 b NaN NaN 9.0 9.0
复制代码
1
print pd.concat([df_obj1, df_obj2], axis=1)
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
A B C D a 2 0 4.0 7.0 b 5 0 9.0 9.0 c 4 9 NaN NaN

注:部分例子来自于小象学院Robin课程

最后

以上就是俏皮溪流最近收集整理的关于03_10Pandas_数据合并concat的全部内容,更多相关03_10Pandas_数据合并concat内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(106)

评论列表共有 0 条评论

立即
投稿
返回
顶部