2016-11-15 6 views
1

У меня есть массивный текстовый файл, фиктивная версия выглядит следующим образом после пропуска заголовков:Проблема с чтением текстового файла в Numpy массив с помощью панд читателя

1444455  7  8  12 52 45 68 70 

1356799  3  3  45 34 23 22 11 

Я хотел бы, чтобы прочитать это в Numpy массив и пр .loadtxt работает очень медленно. Имя файла - data.txt. Сейчас я использую:

u=pd.read_csv('data.txt',dtype=np.float16,header=3).values 

Я играл с параметрами безрезультатно. Если я откажусь от dtype, я получаю одну длинную строку чисел для каждой строки в моем массиве. Когда я вставляю dtype, я получаю ошибку: недопустимый литерал для float(). Я считаю, что есть и некоторые путаницы в отношении двух типов разделителей, которые у меня есть в текстовом файле (вкладки и отдельные пробелы). Как я могу получить это в массивный массив формы (2,8).

Может ли кто-нибудь из вас профи помочь? Благодаря

ответ

2

кажется вам нужно delim_whitespace=True в read_csv если разделитель пробел и header=None:

Тогда приведение к float:

u=pd.read_csv('data.txt', delim_whitespace=True, header=None).astype(float).values 

print (u) 
[[ 1.44445500e+06 7.00000000e+00 8.00000000e+00 1.20000000e+01 
    5.20000000e+01 4.50000000e+01 6.80000000e+01 7.00000000e+01] 
[ 1.35679900e+06 3.00000000e+00 3.00000000e+00 4.50000000e+01 
    3.40000000e+01 2.30000000e+01 2.20000000e+01 1.10000000e+01]] 

но есть numpy.float64:

u=pd.read_csv('data.txt', delim_whitespace=True, header=None).astype(float) 

print (type(u.loc[0,0])) 
<class 'numpy.float64'> 

Если использование dtype=np.float16 получить inf:

+0

Удивительное спасибо! – Canuck

+0

Благодарим вас за принятие. Вы также можете перевернуть - нажмите на маленький треугольник над отметкой «0» выше принимающей метки. Благодарю. – jezrael