2013-02-21 5 views
4

파일에서 빈 열을 삭제하는 가장 빠른 방법은 무엇입니까? 예제 파일은 아래와 같습니다.거대한 파일의 빈 열 삭제

python 'pandas'패키지를 사용했지만 패키지를로드하는 데 너무 많은 시간이 걸렸습니다 (~ 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 

어떤 필드가 비어 있는지 미리 알 수 없습니다. 나는 ("팬더")을 '팬더'

pkg_resources.get_distribution의 0.9.1 버전을 사용하고 있습니다. 버전 '0.9.1'

+3

어떤 열이 비어 있는지 알고 계신가요? 아니면 프로그램에서 알아 내길 바라시겠습니까? – Danny

+0

C - Linux의'open','write' 및'read'를 시도하십시오. – dmg

+1

어떤 버전 팬더 중 당신이 사용하고 있습니까? 10.0에서 상당한 속도 증가가있었습니다. http://pandas.pydata.org/pandas-docs/stable/whatsnew.html#file-parsing-new-features – Zelazny7

답변

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 개 기가 바이트 텍스트 파일을 얻을. 당신이 더 적합 바이너리 형식이없는 그걸 저장 하시겠습니까?