pandas.Series.unique () дает другой результат np.unique () при анализе строк - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть метод для вокселизации большого набора данных, который создает двоичное значение (12 байтов) для всех уникальных вокселей, затем я могу взять подмножество, используя df.isin() для запроса.

Я использовал pandas.Series.unique() в качестве входных данных для этого запроса, но получал странные результаты, поэтому попытался np.unique(), и это сработало.Мой вопрос, почему я получаю разные результаты?

import pandas as pd
import numpy as np
import struct

def voxel(tmp):

    binarize = lambda x: struct.pack('i', int((x * 100) / 5))

    tmp.loc[:, 'xb'] = tmp.x.apply(binarize)
    tmp.loc[:, 'yb'] = tmp.y.apply(binarize)
    tmp.loc[:, 'zb'] = tmp.z.apply(binarize)
    tmp.loc[:, 'B'] = tmp.xb + tmp.yb + tmp.zb

    return tmp

X, Y, Z = np.meshgrid(np.arange(0, 100),
                      np.arange(0, 100),
                      np.arange(0, 100))

grid = pd.DataFrame(data=np.vstack([X.flatten(), Y.flatten(), Z.flatten()]).T, 
                    columns=['x', 'y', 'z'])

grid = voxel(grid)

print 'numpy:', len(np.unique(grid.B)), 'pandas:', len(grid.B.unique())

, который производит

numpy:100000 pandas:99

Я проверил это, используя Pandas 0.23.0 с Python 2.7.14 на RHEL 7.5.1804 и намой MacBook

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...