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

时间:2015-06-11 01:12:57

标签: python machine-learning dataframe

我在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上,有一个'?',我想放弃这一行。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分: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...

答案 1 :(得分:1)

您可以尝试

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是整数索引数组而不是布尔值,则最后一个表单将导致错误。我对熊猫数据框索引感到困惑,所以如果有人告诉我,我会感激不尽。