考慮具有諸如'a-b'的值的熊貓數據框。我想檢查數據幀的所有值的任何位置的「 - 」的發生,而不循環通過各個列。顯然,檢查,如下面的不會起作用:檢查數據幀值中字符/子字符串出現的最簡單方法是什麼?
如果「 - 」在df.values
如何檢查這個有什麼建議?謝謝。
考慮具有諸如'a-b'的值的熊貓數據框。我想檢查數據幀的所有值的任何位置的「 - 」的發生,而不循環通過各個列。顯然,檢查,如下面的不會起作用:檢查數據幀值中字符/子字符串出現的最簡單方法是什麼?
如果「 - 」在df.values
如何檢查這個有什麼建議?謝謝。
一種方法可能是嘗試使用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']
使用NumPy的:np.core.defchararray.find(a,s)
返回INDI的陣列ces,其中子字符串s
出現在a
; 如果不存在,則返回-1。
(np.core.defchararray.find(df.values.astype(str),'-') > -1).any()
返回true如果'-'
是df
存在的任何地方。
我想在這種情況下使用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)
這很聰明,很優雅! – MaxU
@MaxU ty這樣說 – piRSquared
偉大的,謝謝大家! –