Панды содержат не совпадающую полную строку - PullRequest
0 голосов
/ 26 января 2019

У меня проблемы с этой .contains функцией для этого df.Почему это не соответствует моей строке?Очевидно, что df имеет строку.Это соответствует только «Шефу».

import pandas as pd
link = 'https://www.sec.gov/Archives/edgar/data/1448056/000119312518215760/d619223ddef14a.htm'
ceo = 'Chief Executive Officer'
df_list = pd.read_html(link)
df = df_list[62]
df = df.fillna('')

for column in df:
    if column == 4:
        print ('try #1', df[column].str.contains(ceo, case=True, regex=True))
        print ('try #2', df[column].str.contains(ceo, case=True, regex=False))
        print ('try #3', df[column].str.contains(ceo, regex=False))
        print ('try #4', df[column].str.contains(ceo, regex=True))
        print ('try #5', df[column].str.contains(pat=ceo, regex=False))
        print ('try #6', df[column].str.contains(pat=ceo, case=True, regex=True))

1 Ответ

0 голосов
/ 26 января 2019

Проблема в кодировке, вы можете увидеть это, если сделаете:

df[4].iloc[2]

потому что печатает:

'Founder,\xa0Chief\xa0Executive\xa0Officer,\xa0and\xa0Director'

И чтобы исправить это, используйте unidecode:

import unidecode

for column in df.columns:
    if column == 4:
        print ('try #1', df[column].apply(lambda x: 
        unidecode.unidecode(x)).str.contains(ceo, case=True, regex=True))
        print ('try #2', df[column].apply(lambda x: 
        unidecode.unidecode(x)).str.contains(ceo, case=True, regex=False))
        print ('try #3', df[column].apply(lambda x: 
        unidecode.unidecode(x)).str.contains(ceo, regex=False))
        print ('try #4', df[column].apply(lambda x: 
        unidecode.unidecode(x)).str.contains(ceo, regex=True))
        print ('try #5', df[column].apply(lambda x: 
        unidecode.unidecode(x)).str.contains(pat=ceo, regex=False))
        print ('try #6', df[column].apply(lambda x: 
        unidecode.unidecode(x)).str.contains(pat=ceo, case=True, regex=True))
...