如何select只在熊猫data.frame中完成

How to select only complete in a panda data.frame

我在 python

上有以下数据集
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 上,有一个 '?',我想删除此行。我怎样才能做到这一点?

对于 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...

你可以试试

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

np.array(bcw) != '?' 生成一个布尔数组(我尝试直接将 bcw'?' 进行比较,但出现错误,因此我先将其转换为 np.array),它指示位置哪里不是 '?'

np.all(xx, axis=1)将2维布尔数组转为1维,axis=1表示逐行:当且仅当一行中的所有元素都是True,则结果数组中对应的元素是True。现在我们得到一个布尔索引数组,指示不包含 '?'.

的行

因为irow是布尔索引数组,你也可以用下面的形式索引bcw

bcw.ix[irow]
bcw[irow]

但是如果irow是Integer index array而不是Boolean one,最后的形式会导致错误。我对 pandas 数据帧索引有些困惑,所以如果有人告诉我,我将不胜感激。