Python Pandas не читает первую строку csv файла
У меня проблема с чтением CSV (или TXT файла) в модуле pandas. Поскольку функция numpy loadtxt занимает слишком много времени, я решил использовать вместо этого pandas read_csv.
Я хочу сделать массив из файла txt с четырьмя столбцами, разделенными пробелом, и иметь очень большое количество строк (например, 256 ^ 3. В этом примере это 64 ^ 3).
Проблема в том, что я не знаю почему, но похоже, что pandas read_csv всегда пропускает первую строку (первую строку) файла csv (txt), в результате чего на один раз меньше данных.
вот код
from __future__ import division
import numpy as np
import pandas as pd
ngridx = 4
ngridy = 4
ngridz = 4
size = ngridx*ngridy*ngridz
f = np.zeros((size,4))
a = np.arange(size)
f[:, 0] = np.floor_divide(a, ngridy*ngridz)
f[:, 1] = np.fmod(np.floor_divide(a, ngridz), ngridy)
f[:, 2] = np.fmod(a, ngridz)
f[:, 3] = np.random.rand(size)
print f[0]
np.savetxt('Testarray.txt',f,fmt='%6.16f')
g = pd.read_csv('Testarray.txt',delimiter=' ').values
print g[0]
print len(g[:,3])
f [0] и g [0], которые отображаются в выводе, должны совпадать, но это не так, что указывает на то, что панды пропускают первую строку Testarray.txt
. Также длина загружаемого файла g
меньше длины массива f
.
Мне нужна помощь.
Заранее спасибо.
Ответы
Ответ 1
По умолчанию pd.read_csv
использует header=0
(когда параметр names
также не указан), что означает, что первая строка (т.е. С индексом 0) интерпретируется как имена столбцов.
Если ваши данные не имеют заголовка, используйте
pd.read_csv(..., header=None)
Например,
import io
import sys
import pandas as pd
if sys.version_info.major == 3:
# Python3
StringIO = io.StringIO
else:
# Python2
StringIO = io.BytesIO
text = '''\
1 2 3
4 5 6
'''
print(pd.read_csv(StringIO(text), sep=' '))
Без header
в первой строке 1 2 3
задаются имена столбцов:
1 2 3
0 4 5 6
При header=None
первая строка обрабатывается как данные:
print(pd.read_csv(StringIO(text), sep=' ', header=None))
печать
0 1 2
0 1 2 3
1 4 5 6
Ответ 2
Если ваш файл не имеет строки заголовка, вам нужно сообщить Pandas, поэтому с помощью header = None в вашем вызове pd.read_csv().
Ответ 3
Еще более запутанно то, что numpy.loadtxt() не принимает заголовок при чтении CSV файлов.