删除大文件中的空列

4 投票
1 回答
1631 浏览
提问于 2025-04-17 16:40

如何快速删除文件中的空列?下面是一个示例文件。

我使用了Python的'pandas'库,但加载我这个2GB的文件花了太长时间(大约10分钟后我还没有得到结果,所以我放弃了,因为我还需要处理很多文件)。

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   

我事先不知道哪些字段是空的。
我使用的是'pandas'的0.9.1版本。

pkg_resources.get_distribution("pandas").version
'0.9.1'

1 个回答

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 的文本文件真让人头疼。你没有更合适的二进制格式来存储这些数据吗?

撰写回答