python – 在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')

如何找到数据框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

您还可以找到您可以使用的第一个罪犯的位置argmin

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)))

相关文章

转载:一文讲述Pandas库的数据读取、数据获取、数据拼接、数...
Pandas是一个开源的第三方Python库,从Numpy和Matplotlib的基...
整体流程登录天池在线编程环境导入pandas和xrld操作EXCEL文件...
 一、numpy小结             二、pandas2.1为...
1、时间偏移DateOffset对象DateOffset类似于时间差Timedelta...
1、pandas内置样式空值高亮highlight_null最大最小值高亮背景...