我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

本文的主要讨论的话题就是:如何在已有的ndarray变量里面如何插入新的数据,这些新的数据可能是一列数据,也可能是一行数据。这些数据都是怎么被insert进去的呢?

苏南大叔:python教程,如何在ndarray指定位置插入一行或一列数据? - ndarray插入数据
python教程,如何在ndarray指定位置插入一行或一列数据?(图8-1)

苏南大叔的“程序如此灵动”技术博客,本文讨论向ndarray内插入新数据的可能性。测试环境:win10python@3.11.0numpy@1.24.2pandas@1.5.3

函数提供方

本文的.insert()函数的提供方是numpy,而不是ndarrayndarray是作为第一个参数出现的。所以,使用姿势是这样的:

import numpy as np
# ...
ndarray__ = np.insert(ndarray_, ...)

插什么数据

插入的数据可以是普通的数字或字符串,也可以是个数组,也可以是个特殊的二维数组。

import numpy as np

a = np.array([["苏", "南"], ["大", "叔"], ["博", "客"]])
b = np.insert(a, 2, 1, axis=0)
c = np.insert(a, 2, [1, 2], axis=0)
d = np.insert(a, 2, ["技", "术"], axis=0)
e = np.insert(a, [2], [["技", "术"]], axis=0)
f = np.insert(a, [2], [["技"], ["术"]], axis=0)

苏南大叔:python教程,如何在ndarray指定位置插入一行或一列数据? - 插入什么数据
python教程,如何在ndarray指定位置插入一行或一列数据?(图8-2)

苏南大叔:python教程,如何在ndarray指定位置插入一行或一列数据? - 插入什么数据2
python教程,如何在ndarray指定位置插入一行或一列数据?(图8-3)

行还是列 axis

这里通过参数axis,来决定:插入的是一列数据,还是一行数据的问题。关于axis表示什么的问题,不能说为0就是行,为1就是列。这个axis参数到底表示什么,是根据使用它的函数的真实含义来决定的。参考文章:

axis就是表述操作的是数据流的运动方向,axis=1为一列一列推进,axis=0为一行一行推进。那么本文的主要对象是.insert(),所以功能上是:插入目标数据,所以axis=1,就是先插入第一列,再插入第二列...。

测试代码:

import numpy as np

a = np.array([["苏", "南"], ["大", "叔"], ["博", "客"]])
b = np.insert(a, 4, ["技","术"])
c = np.insert(a, 2, ["技","术"],axis=0)
d = np.insert(a, 2, ["技","术","型"],axis=1)

苏南大叔:python教程,如何在ndarray指定位置插入一行或一列数据? - no axis
python教程,如何在ndarray指定位置插入一行或一列数据?(图8-4)

axis参数效果副作用
默认不传递axis在零行i列插入一个或几个数据数据会被扁平化处理
axis=0在i行插入N行数据
axis=1在i列插入N列数据
axis=其它未知未知

苏南大叔:python教程,如何在ndarray指定位置插入一行或一列数据? - axis=0or1
python教程,如何在ndarray指定位置插入一行或一列数据?(图8-5)

插入在什么位置

插入位置的定义,比较多。合法的取值有:int数字、list数组、tuple元组、slice切片。

import numpy as np
a = np.array([["苏", "南"], ["大", "叔"], ["博", "客"]])

b = np.insert(a, 2, ["技", "术"], axis=0)
c = np.insert(a, 2, ["技", "术", "型"], axis=1)

苏南大叔:python教程,如何在ndarray指定位置插入一行或一列数据? - 插入位置
python教程,如何在ndarray指定位置插入一行或一列数据?(图8-6)

import numpy as np
a = np.array([["苏", "南"], ["大", "叔"], ["博", "客"]])

d = np.insert(a, [0, 1], [["技", "术"]], axis=0)
e = np.insert(a, [0, 1], [["技", "术"]], axis=1)
f = np.insert(a, [0, 1], [["技", "术"], ["9", "5"]], axis=0)
g = np.insert(a, [0, 1], [["技"], ["术"], ["型"]], axis=1)

d2 = np.insert(a, (0, 1), [["技", "术"]], axis=0)
e2 = np.insert(a, (0, 1), [["技", "术"]], axis=1)
f2 = np.insert(a, (0, 1), [["技", "术"], ["9", "5"]], axis=0)
g2 = np.insert(a, (0, 1), [["技"], ["术"], ["型"]], axis=1)

苏南大叔:python教程,如何在ndarray指定位置插入一行或一列数据? - 插入位置2
python教程,如何在ndarray指定位置插入一行或一列数据?(图8-7)

无论数组、元组还是普通索引,插入的位置就是原来ndarray的索引位置。但是下面的slice()就比较难以理解了。定义的是被修改后的ndarray的位置,大家自己体会吧。头晕!

import numpy as np
a = np.array([["苏", "南"], ["大", "叔"], ["博", "客"]])

h = np.insert(a, slice(0, 1), [["技"], ["术"], ["型"]], axis=0)
i = np.insert(a, slice(0, 1), [["技"], ["术"], ["型"]], axis=1)

苏南大叔:python教程,如何在ndarray指定位置插入一行或一列数据? - 插入位置3
python教程,如何在ndarray指定位置插入一行或一列数据?(图8-8)

总结

更多python文章,点击链接:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python