从pandas DataFrame中选择行的问题

时间:2019-02-18 12:47:39

标签: python pandas dataframe select nan

当我尝试从符合条件的行中提取数据时遇到错误。
我使用的代码非常简单:

    for c in classes:
           print(X[y == c])

其中 X 是DataFrame中样本的特征, y 是DataFrame中样本的类,而 c 是类标签的列表。
我将这段代码用于两个数据集,它适用于数据集,但不适用于另一个数据集,尽管两者的格式均相同。

在数据集出现错误的情况下,我通过以下方式打印了y == c

     print(y == c)

它返回了这个:

           Classes
     0     True
     1     True
     2     True
           ...
     4572  False
     4573  False
     4574  False

因此,我假设条件匹配工作正常。
但是,当我通过以下方式打印X[y == c]时:

  print(X[y == c])

结果是这样的:

            0   1   2
     0    NaN NaN NaN
     1    NaN NaN NaN
     2    NaN NaN NaN
     3    NaN NaN NaN
           ...
     4574 NaN NaN NaN

请注意, X y 是普通的DataFrame,如下所示:
X

                     0           1          2
     0       -3.786900    9.411757  -2.246594
     1      742.632101  -74.001353  -0.567936
     2     2019.854074  102.077111 -23.776775
     3      -93.048341    3.008569  -1.043599
           ...
     4754  -247.754953   -6.851270  -0.984777

y

            Classes
     0      0
     1      0
     2      0
            ...
     4572   2
     4573   2
     4574   2

这个问题可以解决吗?

2 个答案:

答案 0 :(得分:0)

如果两个DataFrames中都有相同的数据长度和相同的索引值,请沿Classes轴的0DataFrame使用布尔值True,然后通过DataFrame.eq检查每行至少df = X[X.eq(Y['Classes'], axis=0).any(axis=1)] ,并通过DataFrame.any进行过滤:

private void gvLoadAllData_DoubleClick(object sender, MouseButtonEventArgs e)
    {
        if ((e.OriginalSource as FrameworkElement).Parent is DataGridCell) DoSomething();
    }

答案 1 :(得分:0)

我找出了问题的原因。 Xy的长度相同。我只有Data1遇到了上述问题,而Data2却没有。

我检查了Data1和Data2中y的数据类型,发现y

  • <类'pandas.core。 series.Series >与Data2(有效)
  • <类'pandas.core。 frame.DataFrame '>与Data1(不起作用)


我通过以下方式将Data1中的y转换为Series:

    y = y.ix[:,0]

,然后提取行即可正常工作。