Найти долготу и широту столбца в панде - PullRequest
0 голосов
/ 14 мая 2018

У меня есть датафрейм для панд:

df

id  Description
1   POS Transfer A&W MONTREAL QC
2   MKLI QC Montreal DOLLARAMA
3   PC - PAYMENT FROM - *****11*22

Я пытаюсь получить адрес из описания.Что я сделал:

provinces=["qc","on"]

b=[]
for index, row in df.iterrows():
    c=0
    for i in provinces:
        if i in row["Description"].lower().split():
            a=[row["id"],row["description"]]
            c=1
            break
    if(c==1):        
        b.append(a)


b 

[[0, 'POS Transfer A&W MONTREAL QC'],
 [1, ' MKLI QC Montreal DOLLARAMA ']]

Здесь я собираю информацию в массиве.Могу ли я непосредственно захватить его в дополнительном столбце панд

Здесь я захватил все описание, где есть адрес.Чтобы отправить это в Google API, я просто хочу выбрать 1 слово слева и справа от провинции.Это в случае:

POS Transfer A&W MONTREAL QC

Я хочу захватить:

A&W MONTREAL QC

В случае

MKLI QC Montreal DOLLARAMA

Я хочу захватить

QC Montreal DOLLARAMA

Как мне это сделать?

1 Ответ

0 голосов
/ 14 мая 2018

Мне кажется, нужно выбрать 1 слово до и после province:

provinces=["qc","on"]

def f(x):
    #convert to lowercast splitted list for find
    x1 = x.lower().split()
    x2 = x.split()
    #get indices of search word with one word before and after
    #min and max is for avoid indexing errors 
    out = [' '.join(x2[max(0, i-1): min(len(x), i+2)]) for i, y in enumerate(x1) 
                                                       if y in provinces]
    #return first matched value if exist
    return out[0] if len(out) > 0 else ''


df['new'] = df['Description'].apply(f)
print (df)
   id                     Description               new
0   1    POS Transfer A&W MONTREAL QC       MONTREAL QC
1   2      MKLI QC Montreal DOLLARAMA  MKLI QC Montreal
2   3  PC - PAYMENT FROM - *****11*22                  
...