Проблема с чтением текстового файла в массив Numpy с помощью Pandas Reader

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

1444455        7        8        12 52 45 68 70

1356799        3        3        45 34 23 22 11

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

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

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

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

1 ответ

Решение

Кажется тебе нужно 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:

u=pd.read_csv('data.txt', dtype=np.float16, delim_whitespace=True, header=None).values
print (u)
[[ inf   7.   8.  12.  52.  45.  68.  70.]
 [ inf   3.   3.  45.  34.  23.  22.  11.]]
Другие вопросы по тегам