NumPy与Pandas数组合并、拉直及重塑操作详解

雨后青山
雨后青山
发布时间:2026-10-13| 6人浏览过
原创

本文详细解析NumPy和Pandas中数组的合并、拉直与重塑操作。通过concatenate和pandas.concat实现垂直或水平合并,利用ravel进行行优先(C顺序)或列优先(Fortran顺序)的拉直,并结合reshape探讨不同内存顺序下的重塑效果,提供完整代码示例与结果分析。

合并

NumPy与Pandas数组合并操作

在NumPy中合并两个array

NumPy提供了concatenate函数用于数组合并。当指定参数axis=0时,表示在垂直方向(行方向)上合并两个数组,这等同于使用np.vstack函数;当指定参数axis=1时,表示在水平方向(列方向)上合并两个数组,这等同于使用np.hstack函数。

垂直方向:


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

水平方向:


np.concatenate([arr1,arr2],axis=1)
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不同,Pandas的concat方法要求将待合并的两个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

数组的拉直与重塑机制

拉直和重塑

拉直操作旨在将二维数组转换为一维数组。默认情况下,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]])

以上关于NumPy和Pandas中数组合并、拉直及重塑的实例分享完毕,希望能为读者提供参考,并欢迎大家支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。