检查数据帧值中字符/子字符串出现的最简单方法是什么?

时间:2017-07-06 03:28:14

标签: pandas

考虑一个pandas数据框,其值为' a - b'。我想检查一下' - '跨越数据帧的所有值的任何位置,而不循环遍历各个列。显然,如下所示的检查不会起作用:

如果' - '在df.values

有关如何检查的建议吗?感谢。

4 个答案:

答案 0 :(得分:1)

我在这种情况下使用stack() + .str.contains()

In [10]: df
Out[10]:
   a      b      c
0  1  a - b      w
1  2      c      z
2  3      d  2 - 3

In [11]: df.stack().str.contains('-').any()
Out[11]: True

In [12]: df.stack().str.contains('-')
Out[12]:
0  a      NaN
   b     True
   c    False
1  a      NaN
   b    False
   c    False
2  a      NaN
   b    False
   c     True
dtype: object

答案 1 :(得分:1)

您可以使用replace将正则表达式匹配与其他内容交换,然后检查是否相等

df.replace('.*-.*', True, regex=True).eq(True)

答案 2 :(得分:0)

一种方法是尝试将flatten用于valueslist comprehension

df = pd.DataFrame([['val1','a-b', 'val3'],['val4','3', 'val5']],columns=['col1','col2', 'col3'])
print(df)

输出:

   col1   col2    col3
0  val1    a-b    val3
1  val4    3      val5

现在,要搜索-

find_value = [val for val in df.values.flatten() if '-' in val]
print(find_value)

输出:

['a-b']

答案 3 :(得分:0)

使用NumPy:np.core.defchararray.find(a,s)返回索引数组,其中子字符串s出现在a中;  如果它不存在,则返回-1。

(np.core.defchararray.find(df.values.astype(str),'-') > -1).any()
如果'-'中存在df,则

返回True。