Извлекать строки на основе паттерна в Python и записывать их в столбцы pandas dataframe - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть текстовые данные внутри набора данных, как показано ниже

 Record    Note 1
  1       Amount: $43,385.23
          Mode: Air 
          LSP: Panalpina           
  2      Amount: $1,149.32
         Mode: Ocean  
         LSP: BDP
  3     Amount: $1,149.32
         LSP: BDP
         Mode: Road
  4     Amount: U$ 3,234.01
        Mode: Air   
  5     No details

Мне нужно извлечь каждую из деталей внутри текстовых данных и записать их в новый столбец, как показано ниже, как это сделать в python

Ожидаемый результат

Record   Amount         Mode   LSP
1         $43,385.23    Air    Panalpina 
2         $1,149.32     Ocean  BDP
3         $1,149.32     Road   BDP
4         $3,234.01     Air       
5

Возможно ли это. как это можно сделать

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018
import re

Amount = []
Mode = []
LSP = []

def extract_info(txt):
    Amount_lst = re.findall(r"amounts?\s*:\s*(.*)", txt, re.I)
    Mode_lst = re.findall(r"Modes??\s*:\s*(.*)", txt, re.I)
    LSP_lst = re.findall(r"LSP\s*:\s*(.*)", txt, re.I)

    Amount.append(Amount_lst[0].strip() if Amount_lst else "No details")
    Mode.append(Mode_lst[0].strip() if Mode_lst else "No details")
    LSP.append(LSP_lst[0].strip() if LSP_lst else "No details")


df["Note"].apply(lambda x : extract_info(x))

df["Amount"] = Amount_lst
df["Mode"]= Mode_lst
df["LSP"]= LSP_lst

df = df[["Record","Amount","Mode","LSP"]]

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

0 голосов
/ 05 ноября 2018

Напишите пользовательскую функцию и затем используйте pd.apply() -

def parse_rec(x):
    note = x['Note']
    details = note.split('\n')
    x['Amount'] = None
    x['Mode'] = None
    x['LSP'] = None
    if len(details) > 1:
        for detail in details:
            if 'Amount' in detail:
                x['Amount'] = detail.split(':')[1].strip()
            if 'Mode' in detail:
                x['Mode'] = detail.split(':')[1].strip()
            if 'LSP' in detail:
                x['LSP'] = detail.split(':')[1].strip()
    return x

df = df.apply(parse_rec, axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...