2013-02-21 51 views
4

什麼是刪除文件中空列的最快方法。下面給出一個示例文件。我使用了python'pandas'軟件包,但它花費了太多時間(大約10分鐘後,我沒有得到答案,因此退出,因爲我必須爲許多文件執行此操作)才能加載我的2 GB文件。刪除大文件中的空列

df = read_table(inFileName, sep="\t") 
df = df.dropna(axis=1,how='all') #remove columns 

aaa bbb ccc ddd eee 
1 a  c 
2 s  d 
3 d   
    f  d 
4 g  d 
5 h  e 

我不知道哪些字段是空的。 我使用0.9.1版本的 '熊貓'

pkg_resources.get_distribution的( 「熊貓」)。 版本 '0.9.1'

+3

你知道哪些列是空的,或者你想讓程序弄清楚嗎? – Danny 2013-02-21 19:42:29

+0

嘗試一些較低的級別 - C + Linux的'open','write'和'read'。 – dmg 2013-02-21 19:49:27

+1

哪個版本您使用的是大熊貓嗎?顯着提高速度的速度在10.0 http://pandas.pydata.org/pandas-docs/stable/whatsnew.html#file-parsing-new-features – Zelazny7 2013-02-21 19:50:19

回答

2

好,我猜你發現你並不是真的想要刪除那些列。但這裏是你如何在gawk中做到這一點。

awk -F "\t" 'ARGIND==1{ 
    for(i=1;i<=NF;i++)n[i]+=$i!="" 
}ARGIND==2{ 
    if(!ok){for(i in n)if(!n[i])delete n[i];asorti(n);ok=1} 
    for(i in n)printf("%s\t",$n[i]);printf("\n") 
}' input.txt{,} > output.txt 

這可以通過對文件進行兩次傳遞來實現。首先計算每列中的條目數,而第二列僅打印那些至少有一次命中的列。爲了您的示例文件(假設製表符分隔欄,除去AAA BBB等標題,我得到的結果

1 a c 
2 s d 
3 d  
    f d 
4 g d 
5 h e 

但呸,2個GB的文本文件。你難道沒有更合適的二進制格式存儲在?