2016-09-24 2 views
1

У меня есть кадр данных pandas, в котором один из столбцов имеет несколько отсутствующих значений.Удалить строки с отсутствующими значениями в pandas

Кадр данных состоит из сотен строк, но в столбце 4 пять значений: ?.

Я хочу удалить строки, в которых значения ? в этом столбце.

Я пытался использовать что-то вроде

df = df[np.isfinite(df[:,4])] 
+0

Действительно ли они '?' (Строка)? Вы хотите удалить строку, если она содержит какой-либо столбец как таковой? –

+0

Выполняет ли метод 'DataFrame.dropna()' то, что вы хотите сделать? –

+0

'df [df.iloc [:, 4] .astype (str)! ="? "]'. То есть, если столбец 4 означает индекс 4. В противном случае вам может понадобиться использовать индекс 3 для столбца 4. – Abdou

ответ

1

Чтобы удалить строки, для которых четвёртого столбец равен ?, вы можете выбрать данные, которые не равны ?.

# Test data 
df = DataFrame({ 
     'col0': [0, 1, 2, 3, 4], 
     'col1': [0, 1, 2, 3, 4], 
     'col2': [0, 1, 2, 3, 4], 
     'col3': [0, 1, 2, 3, 4], 
     'col4': [0, 1, 2, '?', '?']}) 

df.loc[df.iloc[:, 4] != '?'] 

    col0 col1 col2 col3 col4 
0  0  0  0  0 0 
1  1  1  1  1 1 
2  2  2  2  2 2 

Если вы хотите, чтобы устранить строки, для которых четвёртой колонка содержит ?, это немного сложнее, так как вы должны избежать ? характера и обеспечить значение по умолчанию False для булевой индексировании для работы и, наконец, логическим отрицание ~.

df.loc[~df.iloc[:,4].str.contains('\?', na = False)] 

    col0 col1 col2 col3 col4 
0  0  0  0  0 0 
1  1  1  1  1 1 
2  2  2  2  2 2 

Редактировать

Если столбец содержит только цифры, вы можете также использовать следующий метод. Преобразование в числовое значение с использованием параметра errorscoerce, чтобы произвести NaN для значений, которые невозможно преобразовать. Затем просто снимите значения с помощью dropna.

df.iloc[] = pd.to_numeric(df.iloc[:,4], errors='coerce') 
# Or if you want to apply the transformation to the entire DataFrame 
# df = df.apply(pd.to_numeric, errors='coerce')  
df.dropna(inplace=True) 

     col0 col1 col2 col3 col4 
0  0  0  0  0 0.0 
1  1  1  1  1 1.0 
2  2  2  2  2 2.0 
+0

Не будет ли после столбца 4 иметь все свои номера в виде строковых значений, поскольку он имел строковые значения при загрузке? – Jamgreen

+0

@Jamgreen Да, я только что добавил Edit, чтобы использовать этот подход. – Romain

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