Как объект 'numpy.ndarray' не может быть объектом 'numpy.ndarray'? - PullRequest
0 голосов
/ 14 июня 2019

Когда вы вызываете DataFrame.to_numpy (), pandas найдет d-тип NumPy, который может содержать все d-типы в DataFrame. Но как выполнить обратную операцию?

У меня есть объект numpy.ndarray pred. Это выглядит так:

[[0,00599913 0,00506044 0,00508315 ... 0,00540191 0,00542058 0,00542058]]

Я пытаюсь сделать так:

 pred = np.uint8(pred)
 print("Model predict:\n", pred.T)

Но я получаю:

[[0 0 0 ... 0 0 0]]

Почему после конвертации я не получаю что-то вроде этого:

0 0 0 0 0 0 ... 0 0 0 0 0 0

А как записать пред в файл?

pred.to_csv('pred.csv', header=None, index=False)
pred = pd.read_csv('pred.csv', sep=',', header=None)

выдает сообщение об ошибке:

AttributeError                            Traceback (most recent call last)
<ipython-input-68-b223b39b5db1> in <module>()
----> 1 pred.to_csv('pred.csv', header=None, index=False)
      2 pred = pd.read_csv('pred.csv', sep=',', header=None)
AttributeError: 'numpy.ndarray' object has no attribute 'to_csv'

Пожалуйста, помогите мне разобраться.

1 Ответ

0 голосов
/ 14 июня 2019

pred является ndarray.У него нет to_csv метода.Это то, что есть у pandas DataFrame.

Но давайте посмотрим на первый материал.

Копирование отображения массива, добавление запятых, позволяет мне составить список:

In [1]: alist = [[0.00599913, 0.00506044, 0.00508315, 0.00540191, 0.00542058, 0.
   ...: 00542058]]                                                              
In [2]: alist                                                                   
Out[2]: [[0.00599913, 0.00506044, 0.00508315, 0.00540191, 0.00542058, 0.00542058]]

и создайте из него массив:

In [3]: arr = np.array(alist) 
In [8]: print(arr)                                                              
[[0.00599913 0.00506044 0.00508315 0.00540191 0.00542058 0.00542058]]

или отображение repr, которое ipython дает по умолчанию:

In [4]: arr                                                                     
Out[4]: 
array([[0.00599913, 0.00506044, 0.00508315, 0.00540191, 0.00542058,
        0.00542058]])

Из-за двойных скобок,это 2d массив.Его транспонирование будет иметь форму (6,1).

In [5]: arr.shape                                                               
Out[5]: (1, 6)

Преобразование в uint8 работает, как и ожидалось (я предпочитаю версию astype).Но

In [6]: np.uint8(arr)                                                           
Out[6]: array([[0, 0, 0, 0, 0, 0]], dtype=uint8)
In [7]: arr.astype('uint8')                                                     
Out[7]: array([[0, 0, 0, 0, 0, 0]], dtype=uint8)

Преобразованная форма такая же, как и раньше (1,6).

Преобразование почти бессмысленно.Все значения малы между 1 и 0. Преобразование в малые (1 байт) целые числа без знака предсказуемо дает все 0.

...