[英]Problem in selecting rows from pandas DataFrame
当我尝试从符合条件的DataFrame中提取行时遇到错误。
我使用的代码非常简单:
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
ÿ
Classes
0 0
1 0
2 0
...
4572 2
4573 2
4574 2
这个问题可以解决吗?
如果在数据和相同的索引值的相同长度DataFrames
使用DataFrame.eq
通过柱Classes
沿0
轴布尔DataFrame
,然后检查所述至少一个True
每行由DataFrame.any
和由滤波器boolean indexing
:
df = X[X.eq(Y['Classes'], axis=0).any(axis=1)]
我找出了问题的原因。
X
和y
的长度相同。 我只有Data1有上述问题,而Data2没有。
我检查了Data1和Data2中y
的数据类型,发现y
为
我通过以下方式将Data1中的y
转换为Series:
y = y.ix[:,0]
,然后提取行即可正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.