2015-06-11 1 views
3

я следующие данные набора на питонеКак выбрать только полный в панде data.frame

import pandas as pd 
bcw = pd.read_csv('http://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data', header=None) 

Линия как 24 имеет пропущенные значения:

1057013,8,4,5,1,2,?,7,3,1,4 

На column 7, есть '?', и я хочу отказаться от этой строки. Как я могу это достичь?

ответ

2

Для вашего конкретного примера в column: 7:

bcw = bcw[bcw[7] != '?'] 

Однако, я на самом деле загрузили набор данных и нашел ту же аномалию в column: 6, так что этот код будет выглядеть через все столбцы для '?' и удалите строки:

for col in bcw.columns: 
    if bcw[col].dtype != 'int64': 
     print "Removing possible '?' in column %s..." % col 
     bcw = bcw[bcw[col] != '?'] 

>>> Removing possible '?' in column 6... 
+0

Спасибо, я начинаю с python и все еще борюсь с этими мелочами, но это было именно то, что я хотел. –

1

Вы можете попробовать

import numpy as np 
irow = np.all(np.array(bcw) != '?', axis=1) 
bcw = bcw.ix[irow, :] 

приводит к булевому массиву (я попытался сравнить bcw с '?' напрямую, но получил ошибки, поэтому сначала конвертирую его в np.array), который указывает позиции, где нет '?'.

np.all(xx, axis=1) преобразовать 2-размерный массив Boolean 1-размерность, и axis=1 означает ряды: тогда и только тогда, когда все элементы в строке True, соответствующий элемент массива результата является True. Теперь мы получаем массив булевых индексов, указывающий строки, содержащие '?'.

irow Как булева индекс массива, вы можете также индексировать bcw с формами ниже:

bcw.ix[irow] 
bcw[irow] 

irow Но если это Integer индекс массива вместо Boolean одного, последняя форма вызовет ошибку. Я немного запутался в индексировании кадров данных pandas, поэтому буду благодарен, если кто-нибудь скажет мне.

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