合并
在numpy中合并两个array
numpy中可以通过concatenate,参数axis=0表示在垂直方向上合并两个数组,等价于np.vstack;参数axis=1表示在水平方向上合并两个数组,等价于np.hstack。
垂直方向:
1
2
|
np.concatenate([arr1,arr2],axis = 0 )
np.vstack([arr1,arr2])
|
水平方向:
1
2
|
np.concatenate([arr1,arr2],axis = 1 )
np.hstack([arr1,arr2])
|
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
|
import numpy as np
import pandas as pd
arr1 = np.ones(( 3 , 5 ))
arr1
Out[ 5 ]:
array([[ 1. , 1. , 1. , 1. , 1. ],
[ 1. , 1. , 1. , 1. , 1. ],
[ 1. , 1. , 1. , 1. , 1. ]])
arr2 = np.random.randn( 15 ).reshape(arr1.shape)
arr2
Out[ 8 ]:
array([[ - 0.09666833 , 1.47064828 , - 1.94608976 , 0.2651279 , - 0.32894787 ],
[ 1.01187699 , 0.39171167 , 1.49607091 , 0.79216196 , 0.33246644 ],
[ 1.71266238 , 0.86650837 , 0.77830394 , - 0.90519422 , 1.55410056 ]])
np.concatenate([arr1,arr2],axis = 0 ) #在纵轴上合并
Out[ 9 ]:
array([[ 1. , 1. , 1. , 1. , 1. ],
[ 1. , 1. , 1. , 1. , 1. ],
[ 1. , 1. , 1. , 1. , 1. ],
[ - 0.09666833 , 1.47064828 , - 1.94608976 , 0.2651279 , - 0.32894787 ],
[ 1.01187699 , 0.39171167 , 1.49607091 , 0.79216196 , 0.33246644 ],
[ 1.71266238 , 0.86650837 , 0.77830394 , - 0.90519422 , 1.55410056 ]])
np.concatenate([arr1,arr2],axis = 1 ) #在横轴上合并
Out[ 10 ]:
array([[ 1. , 1. , 1. , ..., - 1.94608976 ,
0.2651279 , - 0.32894787 ],
[ 1. , 1. , 1. , ..., 1.49607091 ,
0.79216196 , 0.33246644 ],
[ 1. , 1. , 1. , ..., 0.77830394 ,
- 0.90519422 , 1.55410056 ]])
|
在pandas中合并两个DataFrame
pandas中通过concat方法实现合并,指定参数axis=0 或者 axis=1,在纵轴和横轴上合并两个数组。与numpy不同,这里的两个dataframe要放在一个列表中,即[frame1,frame2]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
from pandas import DataFrame
frame1 = DataFrame([[ 1 , 2 , 3 ],[ 4 , 5 , 6 ]])
frame2 = DataFrame([[ 7 , 8 , 9 ],[ 10 , 11 , 12 ]])
pd.concat([frame1,frame2], ignore_index = True ) # 合并的数组是一个可迭代的列表。
Out[ 25 ]:
0 1 2
0 1 2 3
1 4 5 6
0 7 8 9
1 10 11 12
pd.concat([frame1,frame2], axis = 1 , ignore_index = True )
Out[ 27 ]:
0 1 2 3 4 5
0 1 2 3 7 8 9
1 4 5 6 10 11 12
|
拉直和重塑
拉直即把一个二维的array变成一个一维的array。默认情况下,Numpy数组是按行优先顺序创建。在空间方面,这就意味着,对于一个二维数字,每行中的数据项是存放在内在中相邻的位置上的。另一种顺序是列优先。
由于历史原因,行优先和列优先又分别被称为C和Fortran顺序。在Numpy中,可以通过关键字参数order=‘C' 和order=‘F' 来实现行优先和列优先。
拉直:
1
2
3
4
5
6
7
8
9
10
11
12
|
arr = np.arange( 15 ).reshape( 3 , - 1 )
arr
Out[ 29 ]:
array([[ 0 , 1 , 2 , 3 , 4 ],
[ 5 , 6 , 7 , 8 , 9 ],
[ 10 , 11 , 12 , 13 , 14 ]])
arr.ravel( 'F' ) #按照列优先,扁平化。
Out[ 30 ]: array([ 0 , 5 , 10 , ..., 4 , 9 , 14 ])
arr.ravel( 'C' ) # 默认顺序。#按照行优先,扁平化。
Out[ 31 ]: array([ 0 , 1 , 2 , ..., 12 , 13 , 14 ])
|
重塑:
Fortran顺序重塑后按列拉直和原数据按列拉直一样。
1
2
3
4
5
6
7
|
arr.reshape(( 5 , 3 ),order = 'F' )
Out[ 32 ]:
array([[ 0 , 11 , 8 ],
[ 5 , 2 , 13 ],
[ 10 , 7 , 4 ],
[ 1 , 12 , 9 ],
[ 6 , 3 , 14 ]])
|
C顺序重塑后按行拉直和原数据按行拉直一样。
1
2
3
4
5
6
7
|
arr.reshape(( 5 , 3 ),order = 'C' )
Out[ 33 ]:
array([[ 0 , 1 , 2 ],
[ 3 , 4 , 5 ],
[ 6 , 7 , 8 ],
[ 9 , 10 , 11 ],
[ 12 , 13 , 14 ]])
|
以上这篇numpy和pandas中数组的合并、拉直和重塑实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/zhanshirj/article/details/73302401