Подтвердить что ты не робот

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.

Мне нужна помощь.

Заранее спасибо.

4b9b3361

Ответ 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 файлов.