我正在尝试制作以下脚本,但在执行时它给了我一个错误,如果有人可以帮助我,非常感谢。
我有一个包含 666 个元素的列表 Bxy 我有一个包含 95 个元素的列表,如下所示:
Bxy[0] es una lista [0,0,0,0,0,0,1,0,0,0,...,0] de 95 elementos
.
.
.
Bxy[665] es una lista [0,0,2,0,1,0,4,0,0,0,...,0] de 95 elementos
我想要做的是获得一个数据框,在其中我获得每个列表的总和,形成一个包含 666 个元素的数据框和 95 个元素的列表总和。
将其转换为 np.array 时,我得到以下信息:
np.array(Bxy)
array([[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
...,
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0]], dtype=object)
当我执行以下操作时,它会给我一个错误。
df = pd.DataFrame()
df["Data"]= list (np.sum(np.array(Bxy), axis=1))
df
类型错误:+ 不支持的操作数类型:“int”和“list”
您应该得到一个包含 666 个元素的数据框。
Data
0
2
0
5
0
1
..
错误本身不再神秘:
也就是说,您正在尝试将整数添加到列表中,这是不可能的:
原因有点复杂,因为原则上我们试图做的是应用于
numpy.sum
一个二维整数数组,该数组来自相同长度的整数列表(95 个项目)。应该让我们怀疑的是,在打印数组时,我们看到:
这首先告诉我们数组不包含原生 NumPy 类型,例如 int32,但它包含的是原生 Python 对象,因为在 Python 中一切都是对象,它可以是 int、list、function 等中的任何内容.
问题是为什么 NumPy 没有创建一个整数数组,而是创建了一个对象数组(引用)。如果 的构造函数
numpy.array
被传递了一个包含整数的列表列表,它将尝试创建一个整数的二维数组,除非有一些情况阻止它:有些项目不是整数,并且该项目不能转换为整数或整数到其他项目的类型(例如,如果我们混合整数和浮点数,最终数组将是浮点类型)。
在列表或其他嵌套容器的情况下,如果任何子列表的大小与其余的不同,则不可能使用 NumPy 自己的类型创建 NumPy 数组,因为在一个维度内元素的数量必须是恒定的。
在问题的具体情况下,理论上原始列表是一个由 95 个整数组成的列表,因此结果应该是一个二维数组类型
int64
。但问题是子列表(行)中的某些项目不是整数而是列表。如果所有内容
Bxy
都正确,则问题中的代码将执行预期的操作:但如果某些项目不是整数而是列表:
正如我们所看到的,已经创建了一个二维数组(因为两行的长度相同),但它是 object 类型的,其中每个项目要么是 Python 对象
int
(本机 Python 类型,而不是 NumPy),要么是一个列表。numpy.sum
在尝试添加的行上应用时7 + [13] + 17
,会导致上述错误。