Pandas 检查数据帧值中字符/子字符串是否出现的最简单方法是什么?
考虑一个具有“a-b”等值的数据帧。我想检查数据帧的所有值中是否有“-”出现,而不必在单个列中循环。很明显,下面这样的检查不起作用: 如果df.values中有“-”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
关于如何检查这一点有什么建议吗?谢谢。一种方法可能是尝试使用
展平
来值和列表理解
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)
这是聪明和非常优雅@谢谢你这么说