автоматическое обнаружение / преобразование типов данных? - PullRequest
3 голосов
/ 05 ноября 2011

Есть ли в numpy функция, которая определяет, должны ли строки быть целыми числами или числами с плавающей запятой, и автоматически их преобразует?Например, у меня часто есть коллекция записей, которые анализируются из текстового файла с использованием комбинации str.strip() и str.split().Затем я получаю что-то вроде

List = [['1','a','.3'],
        ['2','b','-.5']]

, которое затем преобразуется с использованием numpy.rec.fromrecords:

In [1227]: numpy.rec.fromrecords(List)
Out[1227]: 
rec.array([('1', 'a', '.3'), ('2', 'b', '-.5')], 
      dtype=[('f0', '|S1'), ('f1', '|S1'), ('f2', '|S3')])

В R есть функция с именем type.convert, для которой векторы / столбцы символастроки передаются, и он определяет тип столбца (т. е. если он представляет собой смесь строк и чисел, он останется символьным вектором).Excel также делает это (основываясь на первых 6 элементах, если я правильно помню) ...

Есть ли такая функция в NumPy / Python?Я знаю, что мог бы написать функцию для проверки того, можно ли преобразовать каждый элемент столбца в целое число и т. Д., Но есть ли что-нибудь встроенное?Я знаю, что во всех примерах рецепт должен явно указывать dtypes, но я бы хотел пропустить этот шаг.Спасибо.

1 Ответ

5 голосов
/ 05 ноября 2011

numpy.genfromtxt может угадать dtypes, если вы установите dtype=None:

import numpy as np
import io

alist = [['1','a','.3'],
        ['2','b','-.5']]

f = io.BytesIO('\n'.join(' '.join(row) for row in alist))
arr = np.genfromtxt(f,dtype=None)
print(arr)
print(arr.dtype)
# [(1, 'a', 0.3) (2, 'b', -0.5)]
# [('f0', '<i4'), ('f1', '|S1'), ('f2', '<f8')]

Обратите внимание, что было бы лучше применить np.genfromtxt непосредственно к вашему текстовому файлу, а не создавать промежуточный список List (или то, что я назвал alist). Если вам нужно выполнить некоторую обработку файла перед отправкой его на np.genfromtxt, вы можете сделать файлоподобную обертку для файла, которая может выполнить обработку и быть передана np.genfromtxt.

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