numpy和pandas中数组的合并、拉直和重塑

目录

  • 合并
    • 在numpy中合并两个array
    • 在pandas中合并两个DataFrame
  • 拉直和重塑

合并

在numpy中合并两个array

numpy中可以通过concatenate,参数axis=0表示在垂直方向上合并两个数组,等价于np.vstack;参数axis=1表示在水平方向上合并两个数组,等价于np.hstack

垂直方向:

  1. np.concatenate([arr1,arr2],axis=0)
  2. np.vstack([arr1,arr2])

水平方向:

  1. np.concatenate([arr1,arr2],axis=1)
  2. np.hstack([arr1,arr2])
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]

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’ 来实现行优先和列优先。

拉直:

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顺序重塑后按列拉直和原数据按列拉直一样。

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顺序重塑后按行拉直和原数据按行拉直一样。

 arr.reshape((5,3),order='C')
 Out[33]: 
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11],
       [12, 13, 14]])

你可能感兴趣的:(Python)