Преобразование столбца с массивами NumPy преобразует его в массив NUMPY с dtype в качестве объекта - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть столбец в фрейме данных, имеющий количество пустых массивов длины 10. Мой фрейм данных выглядит так:

0       [2.0, 1246.0, 82.0, 43.0, 569.0, 46.0, 424.0, ...
1       [395.0, 2052.0, 1388.0, 8326.0, 5257.0, 176.0,...
10      [4.0, 1.0, 13.0, 1409.0, 7742.0, 259.0, 1856.0...
100     [4.0, 87.0, 1595.0, 706.0, 2935.0, 6028.0, 442...
1000    [45.0, 582.0, 124.0, 6530.0, 6548.0, 748.0, 61...
Name: embedding1, dtype: object

Когда я преобразую его в массив массивов, используя это:

input = np.asarray(df.tolist())

Это дает массив следующим образом:

array([array([   2., 1246.,   82.,   43.,  569.,   46.,  424.,  446., 1054., 39.]),

       array([4.0000e+00, 1.0000e+00, 1.3000e+01, 1.4090e+03, 7.7420e+03,
       2.5900e+02, 1.8560e+03, 3.6181e+04, 4.2000e+01, 8.9000e+02]),
       ...,
       array([4.000e+00, 1.000e+00, 1.300e+01, 2.900e+01, 4.930e+02, 2.760e+02,1.100e+01, 6.770e+02, 6.740e+02, 5.806e+03]),], dtype=object)

Тип, который он дает, является объектом. Я хочу, чтобы объект как float, потому что он дает форму (1000,), но я хочу форму как (1000,10). Я пытался использовать это:

input1 = np.asarray(df1.tolist(),dtype=np.float)

Но выдает следующую ошибку:

ValueError: setting an array element with a sequence.

Как это решить?

PS: все элементы массива строк в массиве данных имеют тип float

1 Ответ

0 голосов
/ 03 сентября 2018

Прежде всего, похоже, что у вас есть pd.Series, а не фрейм данных.

Выполните настройку:

x = [[2.0, 1246.0, 82.0, 43.0, 569.0, 46.0, 424.0],
[395.0, 2052.0, 1388.0, 8326.0, 5257.0, 176.0],
[4.0, 1.0, 13.0, 1409.0, 7742.0, 259.0, 1856.0],
[4.0, 87.0, 1595.0, 706.0, 2935.0, 6028.0, 442],
[45.0, 582.0, 124.0, 6530.0, 6548.0, 748.0, 61]]

s = pd.Series(x)

Что дает

0      [2.0, 1246.0, 82.0, 43.0, 569.0, 46.0, 424.0]
1     [395.0, 2052.0, 1388.0, 8326.0, 5257.0, 176.0]
2    [4.0, 1.0, 13.0, 1409.0, 7742.0, 259.0, 1856.0]
3    [4.0, 87.0, 1595.0, 706.0, 2935.0, 6028.0, 442]
4    [45.0, 582.0, 124.0, 6530.0, 6548.0, 748.0, 61]
dtype: object

У вас есть pd.Series массивов. И кажется, что вы хотите сгладить это. Использование конструктора по умолчанию в списке списков дает фрейм данных, где каждый список интерпретируется как строка:

df2 = pd.DataFrame(s.tolist())

    0       1       2       3       4       5       6
0   2.0     1246.0  82.0    43.0    569.0   46.0    424.0
1   395.0   2052.0  1388.0  8326.0  5257.0  176.0   NaN
2   4.0     1.0     13.0    1409.0  7742.0  259.0   1856.0
3   4.0     87.0    1595.0  706.0   2935.0  6028.0  442.0
4   45.0    582.0   124.0   6530.0  6548.0  748.0   61.0

Теперь вы можете просто получить базовый np.array доступ к фрейму данных .values

df2.values

array([[2.000e+00, 1.246e+03, 8.200e+01, 4.300e+01, 5.690e+02, 4.600e+01,
        4.240e+02],
       [3.950e+02, 2.052e+03, 1.388e+03, 8.326e+03, 5.257e+03, 1.760e+02,
              nan],
       [4.000e+00, 1.000e+00, 1.300e+01, 1.409e+03, 7.742e+03, 2.590e+02,
        1.856e+03],
       [4.000e+00, 8.700e+01, 1.595e+03, 7.060e+02, 2.935e+03, 6.028e+03,
        4.420e+02],
       [4.500e+01, 5.820e+02, 1.240e+02, 6.530e+03, 6.548e+03, 7.480e+02,
        6.100e+01]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...