注意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
280 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
260 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
530 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
280 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
260 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
170 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
21A 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
31A 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
21A 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内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复