Python数组元素添加指南:列表、Numpy与Pandas高效操作
引言
Python没有内置的数组数据类型,但是提供了一些模块来处理数组。本文将详细介绍如何使用array
模块和NumPy
模块向数组添加元素。当您需要创建整数和浮点数数组时,array
模块非常有用;而当您需要对数组进行复杂的数学运算时,NumPy
模块则更为强大。
在许多情况下,您也可以使用Python的列表(list)来模拟数组,因为列表提供了更大的灵活性,例如可以存储混合数据类型,并且仍然具备许多数组的特性。您可以查阅更多关于Python列表的内容以深入了解。
注意:只能将相同数据类型的元素添加到数组中。同样地,您只能将两个相同数据类型的数组连接起来。
使用array
模块向数组添加元素
使用array
模块时,您可以通过+
运算符连接或合并数组,也可以使用append()
、extend()
和insert()
方法向数组添加元素。
语法 | 描述 |
---|---|
+ 运算符, x + y |
返回一个包含两个数组元素的新数组。 |
append(x) |
向数组末尾添加单个元素。 |
extend(iterable) |
将一个列表、数组或其他可迭代对象添加到数组末尾。 |
insert(i, x) |
在数组的指定索引i 之前插入一个元素x 。 |
以下示例演示了如何通过连接两个数组来创建一个新的数组对象:
import array
# 创建整型数组对象
arr1 = array.array('i', [1, 2, 3])
arr2 = array.array('i', [4, 5, 6])
# 打印数组
print("arr1 是:", arr1)
print("arr2 是:", arr2)
# 创建一个包含两个数组所有元素的新数组,并打印结果
arr3 = arr1 + arr2
print("在 arr3 = arr1 + arr2 之后,arr3 是:", arr3)
输出结果是:
arr1 是: array('i', [1, 2, 3])
arr2 是: array('i', [4, 5, 6])
在 arr3 = arr1 + arr2 之后,arr3 是: array('i', [1, 2, 3, 4, 5, 6])
这是文章《如何在Python中向数组中添加元素》的第2部分(共7部分)。
arr1 is: array('i', [1, 2, 3]) arr2 is: array('i', [4, 5, 6]) After arr3 = arr1 + arr2, arr3 is: array('i', [1, 2, 3, 4, 5, 6])
上述例子创建了一个包含给定数组中所有元素的新数组。
以下示例演示如何使用 append()
、extend()
和 insert()
方法向数组添加元素。
import array
# 创建整型数组对象
arr1 = array.array('i', [1, 2, 3])
arr2 = array.array('i', [4, 5, 6])
# 打印数组
print("arr1 is:", arr1)
print("arr2 is:", arr2)
# 向数组末尾添加一个整数并打印结果
arr1.append(4)
print("\nAfter arr1.append(4), arr1 is:", arr1)
# 通过追加另一个相同类型的数组来扩展数组并打印结果
arr1.extend(arr2)
print("\nAfter arr1.extend(arr2), arr1 is:", arr1)
# 在索引位置0之前插入一个整数并打印结果
arr1.insert(0, 10)
print("\nAfter arr1.insert(0, 10), arr1 is:", arr1)
输出是:
arr1 is: array('i', [1, 2, 3]) arr2 is: array('i', [4, 5, 6]) After arr1.append(4), arr1 is: array('i', [1, 2, 3, 4]) After arr1.extend(arr2), arr1 is: array('i', [1, 2, 3, 4, 4, 5, 6]) After arr1.insert(0, 10), arr1 is: array('i', [10, 1, 2, 3, 4, 4, 5, 6])
在前面的例子中,每个方法都在 arr1
数组对象上调用并修改了原始对象。
给NumPy数组添加元素
使用NumPy模块,你可以使用NumPy的 append()
和 insert()
函数向数组中添加元素。
语法 | 描述 |
---|---|
numpy.append(arr, values, axis=None) |
将 values 或数组追加到 arr 的副本末尾。如果未提供 axis ,则默认为 None ,这意味着在追加操作之前,arr 和 values 都会被展平。 |
numpy.insert(arr, obj, values, axis=None) |
沿指定轴在索引 obj 之前插入 values 或数组。如果未提供 axis ,则默认为 None ,这意味着在插入操作之前,只有 arr 会被展平。 |
这是文章《如何在Python中向数组中添加元素》的第3部分(共7部分)。
numpy.append()
函数在后台使用numpy.concatenate()
函数。您可以使用numpy.concatenate()
函数沿着现有轴连接一个数组序列。如需了解更多数组操作例程,请查阅NumPy文档。
注意:
您需要安装NumPy才能测试本节中的示例代码。本节中的示例使用二维数组来突出说明函数如何根据您提供的轴值来操作数组。
使用numpy.append()
函数向数组中添加元素
NumPy数组可以通过维度和形状来描述。当您将值或数组追加到多维数组时,被追加的数组或值需要具有相同的形状,除非是沿着指定的轴方向。
要理解一个二维数组的形状,需要考虑行和列。例如,array([[1, 2], [3, 4]])
的形状为2行2列,而array([[10, 20, 30], [40, 50, 60]])
的形状为2行3列。
使用Python交互式控制台来测试这个概念。
首先,导入NumPy模块,然后创建一些数组并检查它们的形状。
导入NumPy,然后创建并打印np_arr1
。
- import numpy as np
- = np.array([[1, 2], [3, 4]])
- (np_arr1)
[[1 2]
[3 4]]
查看np_arr1
的形状。
- 输出
(2, 2)
创建并打印另一个数组
np_arr2
。- = np.array([[10, 20, 30], [40, 50, 60]])
- (np_arr2)
输出[[10 20 30] [40 50 60]]
检查
np_arr2
的形状。- 输出
(2, 3)
然后尝试在不同的轴向上添加数组。您可以将一个形状为2×3的数组添加到一个沿着轴1具有形状为2×2的数组上,但不能沿着轴0添加。
将
np_arr2
沿着轴0(即按行)添加到np_arr1
。- (np_arr1, np_arr2, axis=0)
您会遇到一个
ValueError
错误:输出
这是文章《如何在Python中向数组中添加元素》的第4部分(共7部分)。
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
File “<__array_function__ internals>”, line 5, in append
File “/Users/digitalocean/opt/anaconda3/lib/python3.9/site-packages/numpy/lib/function_base.py”, line 4817, in append
return concatenate((arr, values), axis=axis)
File “<__array_function__ internals>”, line 5, in concatenate
ValueError: all the input array dimensions for the concatenation axis must match exactly, but along dimension 1, the array at index 0 has size 2 and the array at index 1 has size 3
您不能将由三列组成的行附加到只有两列组成的行的数组中。
将np_arr2
沿着轴1(即按列)附加到np_arr1
上。
输出为:
输出这是文章《如何在Python中向数组中添加元素》的第5部分(共7部分)。
array([[ 1, 2, 10, 20, 30], [ 3, 4, 40, 50, 60]])
你可以将一个具有两行高度的列数组附加到另一个具有两行高度的列数组中。
下面的示例演示了如何使用
numpy.append()
函数向NumPy数组中添加元素。import numpy as np # 创建二维数组对象(整数) np_arr1 = np.array([[1, 2], [3, 4]]) np_arr2 = np.array([[10, 20], [30, 40]]) # 打印数组 print("np_arr1 是:\n", np_arr1) print("np_arr2 是:\n", np_arr2) # 将一个数组附加到另一个数组的末尾并打印结果 # 在附加之前,两个数组都会被展平 append_axis_none = np.append(np_arr1, np_arr2, axis=None) print("append_axis_none 是:\n", append_axis_none) # 沿轴 0(按行)将一个数组附加到另一个数组的末尾并打印结果 append_axis_0 = np.append(np_arr1, np_arr2, axis=0) print("append_axis_0 是:\n", append_axis_0) # 沿轴 1(按列)将一个数组附加到另一个数组的末尾并打印结果 append_axis_1 = np.append(np_arr1, np_arr2, axis=1) print("append_axis_1 是:\n", append_axis_1)
输出结果是:
输出np_arr1 为: [[1 2] [3 4]]
np_arr2 为: [[10 20] [30 40]]
append_axis_none 为: [ 1 2 3 4 10 20 30 40]
append_axis_0 为: [[ 1 2] [ 3 4] [10 20] [30 40]]
append_axis_1 为: [[ 1 2 10 20] [ 3 4 30 40]]
上述例子展示了
numpy.append()
函数在二维数组(2D 数组)的每个轴上的工作方式以及结果数组形状的变化。当轴为 0 时,数组按行追加。当轴为 1 时,数组按列追加。使用
numpy.insert()
将元素添加到数组中numpy.insert()
函数在给定的索引位置、沿指定的轴向将一个数组或数值插入另一个数组中,并返回一个新的数组。与
numpy.append()
函数不同,如果未提供轴或指定为None
,则numpy.insert()
函数仅将第一个数组展平,并且不会展平要插入的值或数组。如果尝试将一个二维数组插入到未指定轴的二维数组中,将会引发ValueError
错误。以下示例演示了如何使用
numpy.insert()
函数将元素插入数组中。import numpy as np # 创建数组对象(整数) np_arr1 = np.array([[1, 2], [4, 5]]) np_arr2 = np.array([[10, 20], 30, 40]]) np_arr3 = np.array([100, 200, 300]) # 打印数组 print("np_arr1 为:\n", np_arr1) print("np_arr2 为:\n", np_arr2) print("np_arr3 为:\n", np_arr3) # 将一维数组插入二维数组,然后打印结果 # 原始数组在插入前被展平 insert_axis_none = np.insert(np_arr1, 1, np_arr3, axis=None) print("insert_axis_none 为:\n", insert_axis_none) # 按行将一个数组插入另一个数组 # 并打印结果 insert_axis_0 = np.insert(np_arr1, 1, np_arr2, axis=0) print("insert_axis_0 为:\n", insert_axis_0) # 按列将一个数组插入另一个数组 # 并打印结果 insert_axis_1 = np.insert(np_arr1, 1, np_arr2, axis=1) print("insert_axis_1 为:\n", insert_axis_1)
输出是:
输出np_arr1 is: [[1 2] [4 5]]
np_arr2 is: [[10 20] [30 40]]
insert_axis_none is: [ 1 100 200 300 2 4 5]
insert_axis_0 is: [[ 1 2] [10 20] [30 40] [ 4 5]]
insert_axis_1 is: [[ 1 10 30 2] [ 4 20 40 5]]
在上面的例子中,当你在轴1上将一个二维数组插入到另一个二维数组时,
np_arr2
中的每个数组都被作为单独的列插入到np_arr1
中。如果你想要将整个二维数组插入到另一个二维数组中,需要在obj
参数索引值周围加上方括号,表示整个数组应该在该位置之前插入。如果没有方括号,numpy.insert()
会将数组按顺序堆叠为列,插入到给定的索引之前。以下示例显示了带有和不带有方括号的对象(索引)参数的输出情况:
import numpy as np # 创建二维数组对象(整数) np_arr1 = np.array([[1, 2], [3, 4]]) np_arr2 = np.array([[10, 20], [30, 40]]) # 打印数组 print("np_arr1 is:\n", np_arr1) print("np_arr2 is:\n", np_arr2) # 将一个数组按列插入到另一个数组中,并打印结果 insert_axis_1 = np.insert(np_arr1, 1, np_arr2, axis=1) print("insert_axis_1 is:\n", insert_axis_1) # 将整个数组按列插入到另一个数组中,并打印结果 insert_index_axis_1 = np.insert(np_arr1, [1], np_arr2, axis=1) print("insert_index_axis_1 is:\n", insert_index_axis_1)
输出为:
输出np_arr1 is: [[1 2] [3 4]]
np_arr2 is: [[10 20] [30 40]]
insert_axis_1 is: [[ 1 10 30 2] [ 3 20 40 4]]
insert_index_axis_1 is: [[ 1 10 20 2] [ 3 30 40 4]]
上面的例子展示了如何使用
numpy.insert()
根据索引符号将列插入数组中。结论
在这篇文章中,你使用了
array
和NumPy
模块向数组添加元素。请继续学习更多关于NumPy
和Python
的教程。