2014-10-08 47 views
0

當我嘗試在塊中添加列和修改頭名稱等時,出現'TypeError:'TextFileReader'對象不支持項目分配'的錯誤。修改大塊csv塊?

我的問題是我使用慢工作筆記本電腦來處理一個相當大的文件(1000萬行)。我想添加一些簡單的列(1或0值),連接兩列以創建唯一ID,更改其他列的dtype,並重命名某些標題,以便它們與稍後將合併的其他文件匹配。我可能可以拆分這個csv(也許選擇日期範圍和製作單獨的文件),但我想學習如何使用塊大小或一般處理大型文件,而不會遇到內存問題。是否可以修改文件塊,然後將它們連接在一起?

我正在做一個原始數據清理,然後將其加載到Tableau中進行可視化。

例(讀/修改1個千萬行):

> rep = pd.read_csv(r'C:\repeats.csv.gz', 
    > compression = 'gzip', parse_dates = True , usecols = 
    > ['etc','stuff','others','...']) 
    > rep.sort() 
    > rep['Total_Repeats'] = 1 
    > rep.rename(columns={'X':'Y'}, inplace = True) 
    > rep.rename(columns={'Z':'A'}, inplace = True) 
    > rep.rename(columns={'B':'C'}, inplace = True) 
    > rep['D']= rep['E'] + rep['C'] 
    > rep.rename(columns={'L':'M'}, inplace = True) 
    > rep.rename(columns={'N':'O'}, inplace = True) 
    > rep.rename(columns={'S':'T'}, inplace = True) 
+0

你現在在做什麼?你能提供一些樣品模式嗎? – Scironic 2014-10-08 14:20:57

+0

用示例編輯我的帖子。 – trench 2014-10-08 16:55:12

回答

0

Python的平時還算有,只要你在看大文件時忽略.read()的一部分好。

如果你只需要使用迭代器,你應該罰款:

with open('mybiginputfile.txt', 'rt') as in_file: 
    with open('mybigoutputfile.txt', 'wt') as out_file: 
      for row in in_file: 
       'do something' 
       out_file.write(row) 

有人誰知道更多將解釋它的內存方面是如何工作的,但是這對我的作品多GB的文件沒有崩潰的Python。

在殺死筆記本電腦之前,您可能需要將數據查找到合適的數據庫,然後才能提供數據並運行Tableau!

+0

你有相應的熊貓代碼嗎?不幸的是,我對編碼完全陌生。這是爲了解決工作效率上的一些問題(我們是一個基於Excel的組織),並且我自己學習了一些熊貓。我對基礎知識沒有太多的理解,但是我發現清理文件等非常有價值(與在Excel中單獨打開文件相比)。 – trench 2014-10-08 14:25:38

+0

對不起 - 我還沒有玩大熊貓呢。懷疑你可能對Blaze有一些樂趣:http://blaze.pydata.org/docs/latest/data.html – 2014-10-08 14:27:35

+0

關於記憶如何工作。 'for in_file'方法將文件一行一行地讀入內存,丟棄前一行。因此,您一次只能在內存中保存多於一行的當前文件,從而導致準備好大量文件的高效方式。對於CSV也可以考慮使用CSV內置模塊,該模塊具有特定的CSV解析器。 – Scironic 2014-10-08 14:30:26