2012-08-23 64 views
0

已嘗試加載大文件(〜480MB,5,250,000條記錄,股票價格每日數據-dt,o,h,l,c,v ,val,adj,fv,sym,代碼 - 約4,500種儀器)使用read_csv轉換成熊貓。它運行良好,並創建DataFrame。然而,我發現,在轉換到面板時,幾個股票的價格是有限的,並且與原始csv文件中的價值無關。將大文件轉換爲使用read_csv轉換爲python熊貓的問題

然後我試圖使用read_csv的CHUNKSIZE參數,並使用一個for循環:

reader = read_csv("bigfile.csv",index_col=[0,9],parse_dates=True,names=['n1','n2',...,'nn'], chunksize=100000) 

new_df = DataFrame(reader.get_chunk(1)) 

for chunk in reader: 
    new_df = concat(new_df, chunk) 

這讀取數據,但:

  1. 我得到同樣的錯誤值轉換爲面板時的值(編輯:)
  2. 需要比普通read_csv更長的時間(無迭代器)

任何想法如何解決這個問題?

編輯: 改變了問題,以反映問題 - 數據框是好的,轉換到Panel是問題。即使在拆分輸入csv文件,合併然後轉換爲面板之後,發現出現錯誤。如果我維護多索引DataFrame,則沒有問題,並且值正確表示。

+1

問題可能與您的CSV文件有關。它可能在意外的地方包含分隔符,導致CSV解析出錯。嘗試通過創建一個最初是數據副本的測試文件來縮小問題範圍,然後逐漸刪除文件的某些部分,直到您導致導致問題的文件部分爲止。 – BrenBarn

+0

你可以與我分享這個文件,這樣我可以調試嗎?我在這裏創建了一個問題:https://github.com/pydata/pandas/issues/1855。如果這不是公共數據,你可以直接通過Gmail郵箱發送電子郵件給我wmailmckinn com –

回答

0

如果您知道一些關閉的特定值,則可以在csv文件中專門檢查這些行。您還應該查看docs on csv,特別是dialectsSniffer class。您可能能夠找到能夠正確檢測文件分隔方式的設置。

如果您發現錯誤消失時,您只看到特定的行,這可能意味着有一個錯誤的/缺失的行中斷的地方扔掉東西。

最後,如果您似乎無法找到正確/不正確行的模式,您可以嘗試(隨機或其他方式)選擇csv文件中行的子集,並查看是否由於大小(我猜這不太可能,但我不確定)。

+0

我這樣做 - 基於@ BrenBarn的建議,我將大文件分成兩部分 - 不是一半,而是從違規行開始。我結束了兩個數據幀 - df1和df2。然後我使用了'df1.join(df2)'給我一個大的DataFrame。在它自己的DataFrame沒問題 - 只有當我使用'to_panel()'將DataFrame轉換爲Panel時纔會出現錯誤值的問題。我重試了'大'文件並將其保存爲DataFrame - 沒有問題。轉換到面板似乎是罪犯 - 不知道這是否是一個錯誤。 – pynoob

1

DataFrame中的某些錯誤已修復爲Panel代碼。請嘗試使用最新的熊貓版本(最好是即將推出的0.10版本),並告訴我們您是否仍然有問題。

+0

會做韋斯。謝謝。認爲我在0.8.1 - 現在升級到0.10 – pynoob