2012-05-07 14 views
7

Hei Tôi đang cố gắng đọc trong gấu trúc tệp csv bạn có thể download from here (tỷ giá euribor Tôi nghĩ bạn có thể tưởng tượng lý do tôi muốn có tệp này!). Tệp này là tệp CSV nhưng nó được định hướng kỳ lạ. Nếu bạn nhập vào tệp Excel có định dạnggấu trúc đọc định hướng csv

02/01/2012,03/01/2012,04/01/2012,,,, 
1w 0.652,0.626,0.606,,,, 
2w,0.738,0.716,0.700,,,, 

hành động với cột đầu tiên lên tới 12m (nhưng tôi cung cấp cho bạn liên kết nơi bạn có thể tải xuống mẫu). Tôi muốn đọc nó trong gấu trúc nhưng tôi không thể đọc nó một cách chính xác. Pandas có chức năng tích hợp sẵn để đọc các tệp csv nhưng bằng cách nào đó nó được mong đợi là hàng định hướng chứ không phải là định hướng cột. Những gì tôi muốn làm là để có được những thông tin trên hàng có nhãn 3m và có các giá trị và ngày tháng để vẽ các biến thể thời gian của chỉ số này. Nhưng tôi không thể xử lý vấn đề này. Tôi biết tôi có thể đọc dữ liệu với

import pandas 
data = pandas.io.read_csv("file.csv",parse_dates=True) 

nhưng nó sẽ hoạt động nếu tệp csv bằng cách nào đó được chuyển đổi. H

Trả lời

0

Tôi chưa bao giờ sử dụng gấu trúc để xử lý csv. Tôi chỉ sử dụng các hàm csv Python chuẩn của Python như các trình vòng lặp sử dụng này.

import csv 
myCSVfile=r"c:/Documents and Settings/Jason/Desktop/hist_EURIBOR_2012.csv" 
f=open(myCSVfile,"r") 
reader=csv.reader(f,delimiter=',') 
data=[] 
for l in reader: 
    if l[0].strip()=="3m": 
     data.append(l) 

f.close() 
+0

Rõ ràng bạn có thể cần phải làm sạch dữ liệu của bạn sau khi nhập, ví dụ: bạn có thể kiểm tra các kiểu dữ liệu, loại bỏ các trường trống (hoặc thay thế bằng None) Phiên bản này xử lý toàn bộ tập dữ liệu, nhưng chỉ trả về một dòng, vì vậy bạn có thể sử dụng ngắt tại điểm đó hoặc có thể nối thêm dữ liệu thú vị khác. ví dụ. thú vị = ['1w', '3m', '9m']; nếu l [0] .strip() thú vị: .... –

4

Một dataframe gấu trúc có một phương pháp .transpose(), nhưng nó không giống như tất cả các hàng trống trong tập tin này. Dưới đây là làm thế nào để có được nó dọn dẹp:

df = pandas.read_csv("hist_EURIBOR_2012.csv") # Read the file 
df = df[:15] # Chop off the empty rows beyond 12m 
df2 = df.transpose() 
df2 = df2[:88] # Chop off what were empty columns (I guess you should increase 88 as more data is added. 

Tất nhiên, bạn có thể chuỗi này lại với nhau:

df2 = pandas.read_csv("hist_EURIBOR_2012.csv")[:15].transpose()[:88] 

Sau đó df2['3m'] là dữ liệu mà bạn muốn, nhưng ngày vẫn được lưu trữ như chuỗi. Tôi không hoàn toàn chắc chắn làm thế nào để chuyển đổi nó thành một DateIndex.

+1

Trong gấu trúc 0.8.0 bạn sẽ có thể thực hiện DatetimeIndex (array_of_strings) hoặc to_datetime (array_of_strings) để phân tích chúng thành các ngày –

+0

Cảm ơn bạn, tôi sẽ thử giải pháp được đề xuất và cuối cùng tôi sẽ chờ gấu trúc 0.8.0 theo như tôi hiểu sẽ có sẵn vào tháng –

+0

Bạn không thể sử dụng tùy chọn này 'skip_blank_lines: boolean, mặc định True'? Nếu được đặt thành False thì các hàng trống sẽ không có vấn đề gì phải không? – Sebastian