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

Pandas 检查数据帧值中字符/子字符串是否出现的最简单方法是什么?,pandas,Pandas,考虑一个具有“a-b”等值的数据帧。我想检查数据帧的所有值中是否有“-”出现,而不必在单个列中循环。很明显,下面这样的检查不起作用: 如果df.values中有“-” 关于如何检查这一点有什么建议吗?谢谢。一种方法可能是尝试使用展平来值和列表理解 df = pd.DataFrame([['val1','a-b', 'val3'],['val4','3', 'val5']],columns=['col1','col2', 'col3']) print(df) 输出: col1 col2

考虑一个具有“a-b”等值的数据帧。我想检查数据帧的所有值中是否有“-”出现,而不必在单个列中循环。很明显,下面这样的检查不起作用:

如果df.values中有“-”


关于如何检查这一点有什么建议吗?谢谢。

一种方法可能是尝试使用
展平
列表理解

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
['a-b']
现在,要搜索
-

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

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

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

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

中的任何位置存在,则返回True。在这种情况下,我将使用
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

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

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

这是聪明和非常优雅@谢谢你这么说