2015-02-07 5 views
8

У меня возникла проблема с чтением CSV (или txt-файла) в модуле pandas Поскольку функция loadtxt numpy занимает слишком много времени, я решил вместо этого использовать pandas read_csv.Python Pandas не читает первую строку csv-файла

Я хочу сделать массив numpy из txt-файла с четырьмя столбцами, разделенными пробелом, и имеет очень большое количество строк (например, 256^3. В этом примере это 64^3).

Проблема в том, что я не знаю почему, но кажется, что read_csv pandas всегда пропускает первую строку (первую строку) файла 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] и г [0], который отображается как выход должен много, но это не делает, указывая, что панды пропускает первую линию Testarray.txt. Кроме того, длина загруженного файла g меньше длины массива f.

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

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

+0

Почему вы сохраняете в numpy, а затем читаете в пандах? Это может быть медленным, вместо этого преобразовать массив в numpy в pandas dataframe, а затем записать в csv. Это намного быстрее. – pbu

+0

О, это просто пример. Мне интересно читать Это не спасает. Спасибо! – Tom

ответ

18

По умолчанию pd.read_csv использует header=0 (когда параметр names также не указан), который означает, что первый (т.е. 0th индексированные) строка интерпретируется как имена столбцов.

Если данные не имеет заголовка, а затем использовать

pd.read_csv(..., header=None) 

Например,

import io 
import pandas as pd 

text = '''\ 
1 2 3 
4 5 6 
''' 

print(pd.read_csv(io.BytesIO(text), sep=' ')) 

Без header, первая линия, 1 2 3, устанавливает имена столбцов:

1 2 3 
0 4 5 6 

С header=None, первая строка обрабатывается как данные:

print(pd.read_csv(io.BytesIO(text), sep=' ', header=None)) 

печатает

0 1 2 
0 1 2 3 
1 4 5 6 
+0

о! Да! это сработало! Было запутанно, что документация pandas на read_csv говорит, что заголовок по умолчанию не установлен, поэтому я был очень смущен. ведь это был заголовок. Большое вам спасибо за помощь! – Tom

1

Если файл не имеет строку заголовка, Вы должны сказать панды это, не используя заголовок = None в вашем вызовите pd.read_csv().

Смежные вопросы