在 pandas 的数据框中查找非数字行?
问题:在 pandas 的数据框中查找非数字行? 我在熊猫中有一个大数据框,除了用作索引的列应该只有数值: df = pd.DataFrame({'a': [1, 2, 3, 'bad', 5], 'b': [0.1, 0.2, 0.3, 0.4, 0.5], 'item': ['a', 'b', 'c', 'd', 'e']}) df = df.set_index('item') 如何找到其中包
·
问题:在 pandas 的数据框中查找非数字行?
我在熊猫中有一个大数据框,除了用作索引的列应该只有数值:
df = pd.DataFrame({'a': [1, 2, 3, 'bad', 5],
'b': [0.1, 0.2, 0.3, 0.4, 0.5],
'item': ['a', 'b', 'c', 'd', 'e']})
df = df.set_index('item')
如何找到其中包含非数字值的数据框df
的行?
在此示例中,它是数据帧中的第四行,在a
列中有字符串'bad'
。如何以编程方式找到该行?
解答
您可以使用np.isreal
检查每个元素的类型(applymap将函数应用于 DataFrame 中的每个元素):
In [11]: df.applymap(np.isreal)
Out[11]:
a b
item
a True True
b True True
c True True
d False True
e True True
如果行中的所有内容都是 True,那么它们都是数字:
In [12]: df.applymap(np.isreal).all(1)
Out[12]:
item
a True
b True
c True
d False
e True
dtype: bool
因此,要获取流氓的子 DataFrame,(注意:上面的否定,〜找到至少有一个流氓非数字的那些):
In [13]: df[~df.applymap(np.isreal).all(1)]
Out[13]:
a b
item
d bad 0.4
您还可以找到_first_ 罪犯的位置,您可以使用argmin:
In [14]: np.argmin(df.applymap(np.isreal).all(1))
Out[14]: 'd'
正如@CTZhu指出的那样,检查它是否是 int 或 float 的的实例可能会稍微快一些(np.isreal 有一些额外的开销):
df.applymap(lambda x: isinstance(x, (int, float)))
更多推荐
已为社区贡献126483条内容
所有评论(0)