2013-02-21 2 views
4

Что такое быстрый способ удаления пустых столбцов в файл. Пример файла приведен ниже.удалять пустые столбцы в огромном файле

Я использовал пакет pandas pantas, но он занимает слишком много времени (после ~ 10 минут я не получил ответа, и так уйти, как я должен сделать это для многих файлов), чтобы загрузить мой файл размером 2 ГБ.

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

+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 

Это работает, делая два прохода через файл. Первый подсчитывает количество записей в каждом столбце, а второй - только те столбцы, у которых было хотя бы одно попадание. Для вашего примера файла (при условии, разделенные табуляцией столбцы, и удаление заголовка ааа ГЭБ и т.д., я получить результат

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

Но гадость, 2 Гб текстовых файлов. Не у вас есть более подходящий двоичный формат для магазин, который находится в?

Смежные вопросы