我在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
所以要获取rouges的subDataFrame,(注意:上面的否定,〜,找到至少有一个非数字的流氓):
In [13]: df[~df.applymap(np.isreal).all(1)]
Out[13]:
a b
item
d bad 0.4
In [14]: np.argmin(df.applymap(np.isreal).all(1))
Out[14]: 'd'
正如@CTZhu所指出的那样,对于check whether it’s an instance of,它可能稍微快一点int或float(np.isreal有一些额外的开销):
df.applymap(lambda x: isinstance(x, (int, float)))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。