当我尝试从符合条件的行中提取数据时遇到错误。
我使用的代码非常简单:
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
这个问题可以解决吗?
答案 0 :(得分:0)
如果两个DataFrames
中都有相同的数据长度和相同的索引值,请沿Classes
轴的0
列DataFrame
使用布尔值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)
我找出了问题的原因。
X
和y
的长度相同。我只有Data1遇到了上述问题,而Data2却没有。
我检查了Data1和Data2中y
的数据类型,发现y
是
我通过以下方式将Data1中的y
转换为Series:
y = y.ix[:,0]
,然后提取行即可正常工作。