Как я могу использовать функцию .findall () для файла Excel, повторяющегося во всех строках столбца? - PullRequest
1 голос
/ 23 июня 2019

У меня есть большой лист Excel с информацией о разных компаниях в одной ячейке для каждой компании, и моя цель состоит в том, чтобы разделить ее на разные столбцы, следуя шаблонам для извлечения информации из первого столбца. Исходные данные выглядят так:

enter image description here

Моя цель - создать такой фрейм данных:

enter image description here

Я создал следующий код для использования шаблонов Mr., Affiliation :, E-mail: и Mobile, потому что они повторяются в каждой строке одинаковым образом. Однако я не знаю, как использовать функцию findall (), чтобы собрать всю необходимую информацию из каждой строки нужного столбца.

import openpyxl
import re
import sys  
import pandas as pd
reload(sys)  
sys.setdefaultencoding('utf8')
wb = openpyxl.load_workbook('/Users/ap/info1.xlsx')
ws = wb.get_sheet_by_name('Companies')
w={'Name': [],'Affiliation': [], 'Email':[]}
for row in ws.iter_rows('C{}:C{}'.format(ws.min_row,ws.max_row)):
    for cells in row:
        a=re.findall(r'Mr.(.*?)Affiliation:',aa, re.DOTALL)
        a1="".join(a).replace('\n',' ')
        b=re.findall(r'Affiliation:(.*?)E-mail',aa,re.DOTALL)
        b1="".join(b).replace('\n',' ')
        c=re.findall(r'E-mail(.*?)Mobile',aa,re.DOTALL)
        c1="".join(c).replace('\n',' ')
        w['Name'].append(q1)
        w['Affiliation'].append(r1)
        w['Email'].append(s1)
        print cell.value

df=pd.DataFrame(data=w)
df.to_excel(r'/Users/ap/info2.xlsx')  

1 Ответ

1 голос
/ 24 июня 2019

Я бы пошел с этим, который просто заменяет «E-mail: ...» разделителем, а затем разделяет и присваивает правому столбцу

df['Name'] = np.nan
df['Affiliation'] = np.nan
df['Email'] = np.nan
df['Mobile'] = np.nan

for i in range(0, len(df)):
    full_value = df['Companies'].loc[i]
    full_value = full_value.replace('Affiliation:', ';').replace('E-mail:', ';').replace('Mobile:', ';')
    full_value = full_value.split(';')
    df['Name'].loc[i] = full_value[0]
    df['Affiliation'].loc[i] = full_value[1]
    df['Email'].loc[i] = full_value[2]
    df['Mobile'].loc[i] = full_value[3]

del df['Companies']
print(df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...