Numpy: genfromtxt образующие кортежи - PullRequest
0 голосов
/ 10 ноября 2019

Вот мой menu.csv:

Item,Price
Curry Rice,3.5
Pork Chop,6
Seafood Soup,5
Salad,2.8

Вот мой код:

import numpy as np
menu_items = np.genfromtxt("menu.csv", delimiter=',',names=True)
print(menu_items)

Что я получу:

[(nan, 3.5) (nan, 6.2) (nan, 3. ) (nan, 2.8)]

Когда я использую dtype= Нет:

[(b'Curry Rice', 3.5) (b'Pork Chop', 6.2) (b'Seafood Soup', 3. )
 (b'Salad', 2.8)]

Что я хочу:

[(Curry Rice, 3.5) (Pork Chop, 6.2) (Seafood Soup, 3. ) (Salad, 2.8)]

Любая помощь приветствуется

Ответы [ 3 ]

0 голосов
/ 10 ноября 2019

По умолчанию numpy.genfromtxt() предполагает, что тип данных каждого столбца является плавающим. Вы можете попросить его попытаться угадать тип данных каждого столбца, передав ему ключевое слово аргумент dtype=None.

menu_items = np.genfromtxt("menu.csv", delimiter=',', names=True, dtype=None)
0 голосов
/ 10 ноября 2019

В вашем примере файла:

In [349]: cat stack58789967.txt                                                 
Item,Price
Curry Rice,3.5
Pork Chop,6
Seafood Soup,5
Salad,2.8

In [350]: np.genfromtxt('stack58789967.txt',delimiter=',',names=True, dtype=None)                                                                     
/usr/local/bin/ipython3:1: VisibleDeprecationWarning: Reading unicode 
   strings without specifying the encoding argument is deprecated. Set the 
   encoding, use None for the system default.
  #!/usr/bin/python3
Out[350]: 
array([(b'Curry Rice', 3.5), (b'Pork Chop', 6. ), (b'Seafood Soup', 5. ),
       (b'Salad', 2.8)], dtype=[('Item', 'S12'), ('Price', '<f8')])

In [351]: np.genfromtxt('stack58789967.txt',delimiter=',',names=True, dtype=None, encoding=None)                                                      
Out[351]: 
array([('Curry Rice', 3.5), ('Pork Chop', 6. ), ('Seafood Soup', 5. ),
       ('Salad', 2.8)], dtype=[('Item', '<U12'), ('Price', '<f8')])

'S12' - это dtype строки байта, один байт на символ. Это норма Py2. «U12» - это тип Unicode, 4 байта на символ. Это норма Py3.

Здесь «кортежи» отмечают записи структурированного массива.

Массив 1d, доступ к полям осуществляется по имени:

In [352]: _.shape                                                               
Out[352]: (4,)
In [353]: __['Item']                                                            
Out[353]: array(['Curry Rice', 'Pork Chop', 'Seafood Soup', 'Salad'], dtype='<U12')
0 голосов
/ 10 ноября 2019

Добро пожаловать!

Я думаю, что ваш вопрос очень похож на Как использовать numpy.genfromtxt, когда первый столбец - строка, а остальные столбцы - числа? . И это выглядит широко ответили. Загляните туда, а также проверьте параметр dtype для np.genfromtxt в питоне doc

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