2015-02-15 4 views
1

У меня есть DataFrame, который составляет 1600 x 115 316 и в основном NaN. Я хочу удалить каждый столбец, в котором не более двух значений. Я написал код, который работает, но человек жив, это занимает много времени.pandas DataFrame эффективно удаляет столбцы

for eachColumn in df.columns: 
    if np.sum(df[eachColumn]) <= 2: 
    df.drop(eachColumn, axis=1, inplace=True) 

Есть ли лучший способ выполнить то, что я пытаюсь сделать здесь?

ответ

3

Вот некоторые примерные данные:

In [18]: df = pd.DataFrame(np.ones(shape=(10, 2))) * np.nan 

In [19]: df.iloc[[2, 3], 0] = 2 

Так колонка 0 имеет 2 не-пренебрежимо малых. Сохраните это и опустите 1.

In [20]: df.drop(df.columns[(~df.isnull()).sum() < 2], axis=1) 
Out[20]: 
    0 
0 NaN 
1 NaN 
2 2 
3 2 
4 NaN 
5 NaN 
6 NaN 
7 NaN 
8 NaN 
9 NaN 

Прочитайте его наизнанку. .isnull дает DataFrame of Bools, переворачивает Trues/Falses с помощью ~, суммирует, чтобы получить счетчик не нуль за столбец, выберите столбцы, где сумма меньше 2 (столбец 1), и снимите это./

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