删除一个巨大的文件中的空列

时间:2013-02-21 19:40:26

标签: python linux sed awk pandas

删除文件中空列的最快方法是什么。下面给出了一个示例文件。

我使用了python'pandas'软件包,但是花了太多时间(大约10分钟后我没有得到答案,因此我必须为许多文件执行此操作)以加载我的2 GB文件。 / p>

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版本的'pandas'

  
    
      

pkg_resources.get_distribution( “熊猫”)。版本       '0.9.1'

    
  

1 个答案:

答案 0 :(得分: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的文本文件。你有没有更合适的二进制格式来存储它?