遍历包含嵌套数组的熊猫数据框列(重新构造的请求)

时间:2020-07-05 13:36:47

标签: python pandas numpy-ndarray

希望您能提供帮助。几周前,您确实为嵌套数组方面的类似问题提供了巨大帮助。 今天,我遇到了类似的问题,并且已经尝试了下面此链接中提供的所有解决方案,

Iterate over pandas dataframe columns containing nested arrays

我的数据是一个包含描述点的ORB向量。它返回一个列表。当我将List转换为数组时,得到此输出

data=np.asarray([['Test /file0090',
    np.asarray([[ 84,  55, 189],
                [248, 100,  18],
                [ 68, 0,  88]])],
    ['aa file6565',
    np.asarray([[ 86,  58, 189],
                [24, 10,  118],
                [ 68, 11,  0]])],
   ['aa filejjhgjgj',
                None],
   ['Test /file0088',  
    np.asarray([[ 54,  58, 787],
                [  4,  1,  18 ],
                [  8,  1,  0 ]])]])

这个小样本,真实数据是一个800.000 x 2的数组 有些图像不返回任何描述符点,并且值显示为“无

在下面的示例中,我刚刚选择了2行,其中“ None”的值位于

array([['/00cbbc837d340fa163d11e169fbdb952.jpg',
        None],
       ['/078b35be31e8ac99b0cbb817dab4c23f.jpg',
        None]], dtype=object)

再一次,我需要在nx4中获得此值(在这种情况下,我们有4个变量,但是我的真实数据中有33个变量)这种情况:

col0,             Col1,  Col2,   col3,  
Test /file0090     84,     55,    189
Test /file0090     248,   100,     18
Test /file0090     84,     55,    189
'aa file6565'      86,     58,    189
'aa file6565'      24,     10,    118
'aa file6565'      68,     11,      0
'aa filejjhgjgj'    0       0       0
'Test /file0088    54,     58,    787
'Test /file0088     4,      1,     18
'Test /file0088     8,      1,      0

链接中提供的解决方案的问题是,当我们在数组中返回此“ None”值时,它将返回

ufunc 'add' did not contain a loop with signature matching types (dtype('<U21'), dtype('<U21')) -> dtype('<U21')

如果有人可以帮助我解决这个问题

1 个答案:

答案 0 :(得分:1)

您可以使用df.fillna('')来修改@anky答案以处理空值:

df = pd.DataFrame(data).add_prefix('col')
df = df.fillna('').explode('col1').reset_index(drop=True)
df = df.join(pd.DataFrame(df.pop('col1').tolist()).add_prefix('Col')).fillna(0)

返回

           col0   Col0   Col1   Col2
 Test /file0090   84.0   55.0  189.0
 Test /file0090  248.0  100.0   18.0
 Test /file0090   68.0    0.0   88.0
    aa file6565   86.0   58.0  189.0
    aa file6565   24.0   10.0  118.0
    aa file6565   68.0   11.0    0.0
 aa filejjhgjgj    0.0    0.0    0.0
 Test /file0088   54.0   58.0  787.0
 Test /file0088    4.0    1.0   18.0
 Test /file0088    8.0    1.0    0.0