2012-03-14 37 views
7

Tôi có một số tập tin văn bản với định dạng sau:Cách chỉ định dtype khi sử dụng pandas.read_csv để tải dữ liệu từ tệp csv?

000423|东阿阿胶|  300|1|0.15000|   | 
000425|徐工机械|  600|1|0.15000|   | 
000503|海虹控股|  400|1|0.15000|   | 
000522|白云山A|  |2|  | 1982.080| 
000527|美的电器|  900|1|0.15000|   | 
000528|柳 工|  300|1|0.15000|   | 

khi tôi sử dụng read_csv để tải chúng vào DataFrame, nó không tạo ra dtype chính xác cho một số cột. Ví dụ, cột đầu tiên được phân tách thành int, không phải là unicode str, cột thứ ba được phân tích cú pháp là unicode str, chứ không phải int, vì một dữ liệu bị thiếu ... Có cách nào để đặt trước dtype của DataFrame, giống như numpy.genfromtxt làm gì?

Cập nhật: tôi đã sử dụng read_csv như thế này mà gây ra vấn đề:

data = pandas.read_csv(StringIO(etf_info), sep='|', skiprows=14, index_col=0, 
         skip_footer=1, names=['ticker', 'name', 'vol', 'sign', 
         'ratio', 'cash', 'price'], encoding='gbk') 

Để giải quyết cả dtype và mã hóa vấn đề, tôi cần phải sử dụng unicode()numpy.genfromtxt đầu tiên:

etf_info = unicode(urllib2.urlopen(etf_url).read(), 'gbk') 
nd_data = np.genfromtxt(StringIO(etf_info), delimiter='|', 
         skiprows=14, skip_footer=1, dtype=ETF_DTYPE) 
data = pandas.DataFrame(nd_data, index=nd_data['ticker'], 
         columns=['name', 'vol', 'sign', 
           'ratio', 'cash', 'price']) 

Sẽ rất tuyệt nếu read_csv có thể thêm các cài đặt dtypeusecols. Xin lỗi vì sự tham lam của tôi.^_^

+3

Thật vậy, một số công việc khác là cần thiết đối với người đọc tệp. Xem tại đây: https://github.com/pydata/pandas/issues/926. Hy vọng rằng một nhà phát triển huyền diệu sẽ ra khỏi đồ gỗ và giúp tôi với điều này. –

Trả lời

4

Chỉ cần đặt: chưa, chưa. Nhiều công việc hơn (đọc: các nhà phát triển tích cực hơn) là cần thiết trong lĩnh vực cụ thể này. Nếu bạn có thể đăng bài như thế nào bạn đang sử dụng read_csv nó có thể giúp đỡ. Tôi nghi ngờ rằng khoảng trắng giữa các thanh có thể là vấn đề

CHỈNH SỬA: hiện tại đã lỗi thời. Hành vi này được bao gồm một cách tự nhiên bởi read_csv

+1

Cảm ơn Wes. Chỉ cần xem video PyCon của bạn về Phân tích dữ liệu bằng Python với gấu trúc từ youtube. Giúp đỡ nhiều! – Deadwood

1

Bây giờ bạn có thể sử dụng dtype trong read_csv.

PS: Kudos đến Wes McKinney để trả lời, cảm thấy khá khó xử khi mâu thuẫn với "quá khứ Wes".

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