合并
在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