2016-02-18 73 views
2

我有一系列.csv文件,我正在用pandas.read_csv閱讀。從一堆列中,我只讀到2列(第2列和第15列)。熊貓隨機讀取一個NaN?

datafiles = glob.glob(mypath) 
    for dfile in datafiles: 
     data = pd.read_csv(dfile,header=6,usecols=['Reading','Value']) 

的CSV看起來像 this,在頂部標題的幾行。每過一段時間,大熊貓都會將這些數字中的一個讀爲NaN。 Excel可以毫無困難地讀取這些值,並且可以直觀地檢查文件,但我沒有看到導致問題的原因。特別是在這種情況下,在這個文件中被索引爲265的行,在數據幀中被索引爲263,'Value'列當它應該是〜27.4時讀取NaN。

>>>data['Value'][264] 
    nan 

這個問題是一致的,不會隨着我讀的文件數量而改變。在許多文件中,這個問題不存在。在其餘部分中,它只會在任一列中讀取一個隨機數作爲NaN。我嘗試使用dtype從自動float64更改爲np.float128,但這不能解決它。有想法該怎麼解決這個嗎?

更新:grep搜索顯示換行符是\ M,只有4個例外 - 每個文件頭部的行開頭。在進一步的檢查中,這個特定的點[264]在失敗的文件中被區別對待:在5/12文件中,它很好。在2/12文件中它被讀出爲27.0,在3/12中被讀出爲nan,在2/12中被讀出爲2.0。其中一個文件(一個讀出一個27.0)可用於download here

+0

有可能文件在某些​​行上有不同的換行符?該文件是否爲UTF-8-BOM格式?嘗試使用記事本++將其切換爲UTF-8 –

+0

您可以上傳某個有問題的CSV嗎? –

+0

@CharlieHaley查看更新。謝謝! – k2r

回答

1

它看起來像你隨機在你的csv文件中有null characters,並且它們導致了問題。你需要做什麼來解決這個問題是取代\0沒什麼。

下面是如何操作的示例。導入是從字符串而不是從文件加載的because of

import sys 
if sys.version_info[0] < 3: 
    from StringIO import StringIO 
else: 
    from io import StringIO 

datafiles = glob.glob(mypath) 
for dfile in datafiles: 
    st='' 
    with open(dfile,'r') as f: 
     for line in f: 
      line = line.replace('\0','') 
      st += line 
    data = pd.read_csv(StringIO(st),header=6,usecols=['Reading','Value']) 

這將是冷靜,如果大熊貓有一個功能,在默認情況下,當您將數據加載到數據幀要做到這一點,但現在看來,有像,截至目前無功能。

+0

太棒了,非常感謝。我實際上只是自己找到了空字符,但我正在尋找一個bash命令行來刪除它們,但這也會起作用! – k2r