2016-10-03 4 views
1
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'}] 

Ich möchte die Zeilen auszuwählen, wenn der letzte Eintrag in der Liste der Reihe von URL-Spalte ‚https‘ enthält, während das Überspringen fehlt Werte.Python Pandas überprüfen, ob das letzte Element einer Liste in einer Zelle bestimmte Zeichenfolge enthält

Meine aktuelle Skript

df[df['url'].str[-1].str.contains('https',na=False)] 

Falsch zurück Werte für alle Zeilen, während einige von ihnen tatsächlich https enthält.

Kann jemand damit helfen?

+0

Was ist 'print (Typ (df.ix [1, 'url']))'? – jezrael

+0

@jezrael es ist Liste – UserYmY

+0

als Ihr dtype Liste müssen Sie 'apply' verwenden:' df ['url']. Apply (Lambda x: 'https' in x [-1]) ' – EdChum

Antwort

1

Ich glaube, Sie erste NaN zu empty url ersetzen und dann apply verwenden:

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 

Erste Lösung:

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 
0

nicht sicher url ist str oder andere Arten

können Sie wie folgt tun:

"https" in str(df.url[len(df)-1]) 

oder

str(df.ix[len(df)-1].url).__contains__("https") 
Verwandte Themen