python教程,如何在ndarray指定位置插入一行或一列数据?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
本文的主要讨论的话题就是:如何在已有的ndarray
变量里面如何插入新的数据,这些新的数据可能是一列数据,也可能是一行数据。这些数据都是怎么被insert
进去的呢?
苏南大叔的“程序如此灵动”技术博客,本文讨论向ndarray
内插入新数据的可能性。测试环境:win10
,python@3.11.0
,numpy@1.24.2
,pandas@1.5.3
。
函数提供方
本文的.insert()
函数的提供方是numpy
,而不是ndarray
。ndarray
是作为第一个参数出现的。所以,使用姿势是这样的:
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)
行还是列 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)
axis参数 | 效果 | 副作用 |
---|---|---|
默认不传递axis | 在零行i列插入一个或几个数据 | 数据会被扁平化处理 |
axis=0 | 在i行插入N行数据 | 无 |
axis=1 | 在i列插入N列数据 | 无 |
axis=其它 | 未知 | 未知 |
插入在什么位置
插入位置的定义,比较多。合法的取值有: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)
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)
无论数组、元组还是普通索引,插入的位置就是原来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
文章,点击链接:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。