2015-02-07 76 views
8

Tôi gặp sự cố khi đọc CSV (hoặc tệp txt) trên mô-đun gấu trúc Vì hàm loadtxt của numpy mất quá nhiều thời gian, nên tôi quyết định sử dụng gấu trúc read_csv thay thế.Python Pandas không đọc hàng đầu tiên của tệp csv

Tôi muốn tạo một mảng khó khăn từ tệp txt với bốn cột được phân tách bằng dấu cách và có số hàng rất lớn (như, 256^3. Trong ví dụ này, nó là 64^3).

Vấn đề là tôi không biết tại sao nhưng có vẻ như read_csv của gấu trúc luôn bỏ qua dòng đầu tiên (hàng đầu tiên) của tệp csv (txt), dẫn đến ít dữ liệu hơn.

đây là mã.

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] và g [0] sẽ được hiển thị như một đầu ra phải nhiều nhưng nó không, chỉ ra rằng gấu trúc được bỏ qua dòng đầu tiên của Testarray.txt. Ngoài ra, độ dài của tệp được tải g nhỏ hơn chiều dài của mảng f.

Tôi cần trợ giúp.

Xin cảm ơn trước.

+0

lý do tại sao bạn tiết kiệm được nhiều tiền và sau đó đọc trong gấu trúc? Nó có thể được làm chậm, thay vì chuyển đổi mảng trong numpy để pandas dataframe sau đó ghi vào csv. Nó nhanh hơn rất nhiều. – pbu

+0

ồ, nó chỉ là một ví dụ. Im quan tâm đến việc đọc Nó không lưu nó. cảm ơn bạn! – Tom

Trả lời

18

Theo mặc định, pd.read_csv sử dụng header=0 (khi tham số names cũng không được chỉ định) có nghĩa là dòng đầu tiên (tức là 0 được lập chỉ mục) được hiểu là tên cột.

Nếu dữ liệu của bạn không có tiêu đề, sau đó sử dụng

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

Ví dụ,

import io 
import pandas as pd 

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

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

Without header, dòng đầu tiên, 1 2 3, đặt tên cột:

1 2 3 
0 4 5 6 

Với header=None, dòng đầu tiên được coi là dữ liệu:

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

in

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

oh! vâng! nó đã làm việc! Thật khó hiểu, tài liệu về gấu trúc trên read_csv cho biết tiêu đề không phải là mặc định nên tôi rất bối rối. sau khi tất cả là tiêu đề. Cảm ơn bạn rất nhiều vì đã giúp đỡ! – Tom

1

Nếu tập tin của bạn không có một dòng tiêu đề bạn cần nói với Pandas nên bằng cách sử dụng header = None trong của bạn gọi tới pd.read_csv().

Các vấn đề liên quan