问题:忽略带有str.contains的NaN
我想查找包含字符串的行,如下所示:
DF[DF.col.str.contains("foo")]
但是,这失败了,因为某些元素是NaN:
ValueError:无法使用包含NA / NaN值的向量建立索引
所以我诉诸于混乱
DF[DF.col.notnull()][DF.col.dropna().str.contains("foo")]
有没有更好的办法?
回答 0
有一个标志:
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
参见str.replace
文档:
na:默认的NaN,填充缺失值的值。
因此,您可以执行以下操作:
In [21]: df.loc[df.a.str.contains("foo", na=False)]
Out[21]:
a
0 foo1
1 foo2
回答 1
除了上述答案,我想说的是对于没有单个单词名称的列,您可以使用:
df[df['Product ID'].str.contains("foo") == True]
希望这可以帮助。
回答 2
我不是100%的理由(实际上是来这里寻找答案的),但是这也行得通,并且不需要替换所有的nan值。
import pandas as pd
import numpy as np
df = pd.DataFrame([["foo1"], ["foo2"], ["bar"], [np.nan]], columns=['a'])
newdf = df.loc[df['a'].str.contains('foo') == True]
可以使用或不使用.loc
。
我不知道为什么会这样,据我了解,当您使用方括号索引时,pandas会将方括号内的内容评估为True
或False
。我不知道为什么在方括号“ extra boolean”中添加该短语完全没有效果。
回答 3
您也可以设置:
DF[DF.col.str.contains(pat = '(foo)', regex = True) ]
回答 4
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 <module>
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]
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。