2015-04-20 2 views
0

Как удалить наблюдение из фрейма данных в python. Например, у меня есть кадр данных с переменными a, b, c в нем, и я vat для удаления наблюдения, если переменная a отсутствует, или переменная c равна нулю.Удаление наблюдений из фрейма данных в python

+0

ли 'а, б , c 'имена столбцов? – unutbu

+0

Можете ли вы опубликовать исходные входные данные и желаемый результат, ваш вопрос непонятен – EdChum

+0

Вы хотите отфильтровать весь столбец или строки? – EdChum

ответ

2

Можно построить булеву маску с помощью isnull:

mask = (df['a'].isnull()) | (df['c'] == 0) 

, а затем выбрать нужные строки с:

df = df.loc[~mask] 

~mask является булевым обратным mask, поэтому df.loc[~mask] выбирает строки, где a является не имеет значения иc не является 0.


Например,

import numpy as np 
import pandas as pd 

arr = np.arange(15, dtype='float').reshape(5,3) % 4 
arr[arr > 2] = np.nan 

df = pd.DataFrame(arr, columns=list('abc')) 
#  a b c 
# 0 0 1 2 
# 1 NaN 0 1 
# 2 2 NaN 0 
# 3 1 2 NaN 
# 4 0 1 2 

mask = (df['a'].isnull()) | (df['c'] == 0) 
df = df.loc[~mask] 

дает

a b c 
0 0 1 2 
3 1 2 NaN 
4 0 1 2 
+0

Спасибо, это работает –

0

Допустим, ваш DataFrame выглядит следующим образом:

In [2]: data = pd.DataFrame({ 
    ...:  'a': [1,2,3,pd.np.nan,5], 
    ...:  'b': [3,4,pd.np.nan,5,6], 
    ...:  'c': [0,1,2,3,4], 
    ...: }) 

In [3]: data 
Out[3]: 
    a b c 
0 1 3 0 
1 2 4 1 
2 3 NaN 2 
3 NaN 5 3 
4 5 6 4 

Для удаления строк с пропущенными наблюдениями, использование:

Для удаления строки, в которых только столбец «а» уже не хватает наблюдений, использование:

In [6]: data.dropna(subset=['a']) 
Out[6]: 
    a b c 
0 1 3 0 
1 2 4 1 
2 3 NaN 2 
4 5 6 4 

Для удаления строк, которые имеют либо отсутствующие наблюдения или нули, использование:

In [18]: data[data.all(axis=1)].dropna() 
Out[18]: 
    a b c 
1 2 4 1 
4 5 6 4 
Смежные вопросы