my dataframe df:
index url
1 [{'url': 'http://bhandarkarscollegekdp.org/'}]
2 [{'url': 'http://cateringinyourhome.com/'}]
3 NaN
4 [{'url': 'http://muddyjunction.com/'}]
5 [{'url': 'http://ecskouhou.jp/'}]
6 [{'url': 'http://andersrice.com/'}]
7 [{'url': 'http://durager.cz/'}, {'url': 'http:andersrice.com'}]
8 [{'url': 'http://milenijum-osiguranje.rs/'}]
9 [{'url': 'http://form-kind.org/'}, {'url': 'https://osiguranje'},{'url': 'http://beseka.com.tr'}]
如果url列行列表中的最后一项包含“https”,我想选择行,同时跳过缺少的值。
我当前的剧本
df[df['url'].str[-1].str.contains('https',na=False)]
返回所有行的False值,而其中一些实际上包含https。
任何人都可以帮忙吗?
答案 0 :(得分:1)
我认为您可以先将NaN
替换为empty url
,然后再使用apply
:
df = pd.DataFrame({'url':[[{'url': 'http://bhandarkarscollegekdp.org/'}],
np.nan,
[{'url': 'http://cateringinyourhome.com/'}],
[{'url': 'http://durager.cz/'}, {'url': 'https:andersrice.com'}]]},
index=[1,2,3,4])
print (df)
url
1 [{'url': 'http://bhandarkarscollegekdp.org/'}]
2 NaN
3 [{'url': 'http://cateringinyourhome.com/'}]
4 [{'url': 'http://durager.cz/'}, {'url': 'https...
df.loc[df.url.isnull(), 'url'] = [[{'url':''}]]
print (df)
url
1 [{'url': 'http://bhandarkarscollegekdp.org/'}]
2 [{'url': ''}]
3 [{'url': 'http://cateringinyourhome.com/'}]
4 [{'url': 'http://durager.cz/'}, {'url': 'https...
print (df.url.apply(lambda x: 'https' in x[-1]['url']))
1 False
2 False
3 False
4 True
Name: url, dtype: bool
第一个解决方案:
df.loc[df.url.notnull(), 'a'] =
df.loc[df.url.notnull(), 'url'].apply(lambda x: 'https' in x[-1]['url'])
df.a.fillna(False, inplace=True)
print (df)
url a
1 [{'url': 'http://bhandarkarscollegekdp.org/'}] False
2 NaN False
3 [{'url': 'http://cateringinyourhome.com/'}] False
4 [{'url': 'http://durager.cz/'}, {'url': 'https... True
答案 1 :(得分:0)
不确定url是str还是其他类型
你可以这样做:"https" in str(df.url[len(df)-1])
或
str(df.ix[len(df)-1].url).__contains__("https")