genfromtxt dtype = Нет возвращает неправильную форму - PullRequest
2 голосов
/ 01 октября 2011

Я новичок в NumPy, и мне трудно читать CSV в массив NumPy с помощью genfromtxt.

Я нашел CSV-файл в Интернете, который я использую в качестве примера.Это смесь поплавков и струн.Это здесь: http://pastebin.com/fMdRjRMv

Я использую numpy через pylab (инициализация в системе Ubuntu через: ipython -pylab).numpy.version.version - это 1.3.0.

Вот что я делаю:

Пример №1:

data = genfromtxt("fMdRjRMv.txt", delimiter=',', dtype=None)

data.shape

(374, 15)


data[10,10] ## Take a look at an example element

'30'

type(data[10,10])

type 'numpy.string_'

Ошибок неткавычки в файле CSV, поэтому я понятия не имею, почему он должен думать, что число является строкой.Кто-нибудь знает, почему это так?

Пример № 2 (пропуск первой строки):

data = genfromtxt ("fMdRjRMv.txt", delimiter = ', ', dtype = None, skiprows = 1)

data.shape

(373,)

Кто-нибудь знает, почему он не будет читать все это в 1массив?

Большое спасибо!

1 Ответ

7 голосов
/ 02 октября 2011

В вашем примере # 1 проблема заключается в том, что все значения в одном столбце должны иметь один и тот же тип данных.Поскольку первая строка вашего файла данных содержит имена столбцов, это означает, что тип данных каждого столбца является строкой.

В примере №2 у вас правильная идея пропустить первый ряд.Обратите внимание, что 1.3.0 довольно старая версия (у меня 1.6.1).В более новых версиях skiprows устарела, и вместо этого следует использовать skip_header.

Причина, по которой форма массива равна (373,), заключается в том, что это структурированный массив (см. http://docs.scipy.org/doc/numpy/user/basics.rec.html),, который numpy использует для представления неоднородных данных. Таким образом, data[10] дает вамвсю строку вашей таблицы. Вы также можете получить доступ к столбцам данных по имени, например, data['f10']. Вы можете найти имена столбцов в data.dtype.names. Также можно использовать исходные имена столбцов, которые определены вПервая строка вашего файла данных:

 data = genfromtxt("fMdRjRMv.txt", dtype=None, delimiter=',', names=True)

, затем вы можете получить доступ к столбцу, например data['Age'].

...