我有pandas.DataFrame
哪些行包含标量值和不同大小的矩阵。与np.object
数据类型一起存储的矩阵。然而,当我尝试同时分配整行时,我遇到了问题。我该怎么做
这是我选择MaxU所要求的数据结构的原因: 我记录了一台机器的几个参数(标量,uint16,int32和amp)以及一个摄像机图像。图像上有一个斑点,但在大小和位置上不同,从一个镜头到另一个镜头。我创建了一个感兴趣的动态区域,它足够大以捕获斑点但相对于完整图像节省空间,通常导致50x100而不是1024x1024 uint16。此外,我从该图像中提取了几个参数,这些参数都是表中表示的标量值。每行对应一个所有参数的记录。
mwe
示例如下:
#!/usr/bin/env python3
import pandas as pd
import numpy as np
raw = np.zeros(10, dtype=[('a', 'f8'), ('b', 'i4'), ('c', 'O')])
print(f'raw\n {raw}')
print(f'raw.dtype\n {raw.dtype}\n')
frame = pd.DataFrame(raw)
print(f'frame\n {frame}')
print(f'frame.dtypes\n {frame.dtypes}')
# Works fine
frame.loc[0, ('a', 'b', 'c')] = (1, 2, 'a')
# ValueError: setting an array element with a sequence.
frame.loc[0, ('a', 'b', 'c')] = (1, 2, np.zeros((20, 20)))
返回:
raw
[( 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)]
raw.dtype
[('a', '<f8'), ('b', '<i4'), ('c', 'O')]
frame
a b c
0 0.0 0 0
1 0.0 0 0
2 0.0 0 0
3 0.0 0 0
4 0.0 0 0
5 0.0 0 0
6 0.0 0 0
7 0.0 0 0
8 0.0 0 0
9 0.0 0 0
frame.dtypes
a float64
b int32
c object
dtype: object
Traceback (most recent call last):
File "test_25.py", line 17, in <module>
frame.loc[0, ('a', 'b', 'c')] = (1, 2, np.zeros((20, 20)))
File "/home/bin/conda/lib/python3.6/site-packages/pandas/core/indexing.py", line 179, in __setitem__
self._setitem_with_indexer(indexer, value)
File "/home/bin/conda/lib/python3.6/site-packages/pandas/core/indexing.py", line 557, in _setitem_with_indexer
elif np.array(value).ndim == 2:
Val