Ignorar NaNs con str.contains

Quiero encontrar filas que contengan una cadena, así:

DF[DF.col.str.contains("foo")] 

Sin embargo, esto falla porque algunos elementos son NaN:

ValueError: no se puede indexar con un vector que contiene valores NA / NaN

Así que recurro a los ofuscados.

 DF[DF.col.notnull()][DF.col.dropna().str.contains("foo")] 

¿Hay alguna manera mejor?

Hay una bandera para eso:

 In [11]: df = pd.DataFrame([["foo1"], ["foo2"], ["bar"], [np.nan]], columns=['a']) In [12]: df.a.str.contains("foo") Out[12]: 0 True 1 True 2 False 3 NaN Name: a, dtype: object In [13]: df.a.str.contains("foo", na=False) Out[13]: 0 True 1 True 2 False 3 False Name: a, dtype: bool 

Ver los documentos de str.replace :

na: NaN por defecto, complete el valor para los valores faltantes.


Así que puedes hacer lo siguiente:

 In [21]: df.loc[df.a.str.contains("foo", na=False)] Out[21]: a 0 foo1 1 foo2 

Además de las respuestas anteriores, yo diría que para las columnas que no tienen un solo nombre de palabra, puede usar:

 df[df['Product ID'].str.contains("foo") == True] 

Espero que esto ayude.

 import folium import pandas data= pandas.read_csv("maps.txt") lat = list(data["latitude"]) lon = list(data["longitude"]) map= folium.Map(location=[31.5204, 74.3587], zoom_start=6, tiles="Mapbox Bright") fg = folium.FeatureGroup(name="My Map") for lt, ln in zip(lat, lon): c1 = fg.add_child(folium.Marker(location=[lt, ln], popup="Hi i am a Country",icon=folium.Icon(color='green'))) child = fg.add_child(folium.Marker(location=[31.5204, 74.5387], popup="Welcome to Lahore", icon= folium.Icon(color='green'))) map.add_child(fg) map.save("Lahore.html") Traceback (most recent call last): File "C:\Users\Ryan\AppData\Local\Programs\Python\Python36-32\check2.py", line 14, in  c1 = fg.add_child(folium.Marker(location=[lt, ln], popup="Hi i am a Country",icon=folium.Icon(color='green'))) File "C:\Users\Ryan\AppData\Local\Programs\Python\Python36-32\lib\site-packages\folium\map.py", line 647, in __init__ self.location = _validate_coordinates(location) File "C:\Users\Ryan\AppData\Local\Programs\Python\Python36-32\lib\site-packages\folium\utilities.py", line 48, in _validate_coordinates 'got:\n{!r}'.format(coordinates)) ValueError: Location values cannot contain NaNs, got: [nan, nan]