考虑一个pandas数据框,其值为' a - b'。我想检查一下' - '跨越数据帧的所有值的任何位置,而不循环遍历各个列。显然,如下所示的检查不会起作用:
如果' - '在df.values
有关如何检查的建议吗?感谢。
答案 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
用于values
和list 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。