用可移动对象设置pandas行

时间:2017-11-06 19:43:59

标签: python pandas dataframe indexing

我有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

0 个答案:

没有答案