Разделение текстовых данных на несколько столбцов с помощью Regex - PullRequest
0 голосов
/ 19 сентября 2019

Я новичок в regex, и я хотел бы разбить некоторые текстовые данные на столбцы.Глядя на «тест-данные», структура выглядит следующим образом: Имя / Фамилия, университет и страна.Как я могу разделить этот текст на три колонки (каждая из которых содержит название, университет и страну)?

test_data = "Bob Smith, São Paulo State University/Department of Production Engineering, Brazil James Smith, São Paulo State University/Department of Production Engineering, Brazil Bob James, São Paulo State University/Department of Production Engineering, Brazil"

test_df = pd.DataFrame([test_data], columns=["test_data"])
split_df = test_df["test_data"].str.split(r'\w+,', expand=True)
split_df.head()

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 19 сентября 2019

Если ваши данные лучше структурированы, где каждый столбец разделен знаком ",", вы можете сделать что-то вроде следующего.

IN:

test_data = "São Paulo State University/Department of Production Engineering, Brazil, James Smith, São Paulo State University/Department of Production Engineering, Brazil, Bob James, São Paulo State University/Department of Production Engineering, Brazil, Mike Smith"

df = pd.DataFrame(data = np.array(test_data.split(',')).reshape(-1, 3), columns = ['University', 'Country', 'Name'])

OUT:

|   |                            University                           | Country | Name        |
|---|:---------------------------------------------------------------:|---------|-------------|
| 0 | São Paulo State University/Department of Production Engineering | Brazil  | James Smith |
| 1 | São Paulo State University/Department of Production Engineering | Brazil  | Bob James   |
| 2 | São Paulo State University/Department of Production Engineering | Brazil  | Mike Smith  |
0 голосов
/ 19 сентября 2019

Я не уверен, как вы генерируете свои входные данные, и я также не уверен, что данные согласованы в большем наборе.Этот ответ основан на текущей структуре набора данных без изменений.Вы должны быть в состоянии добавить окончательный вывод в фрейм данных.Если у вас есть проблемы с этим, я добавлю эту часть тоже.

from pprint import pprint

input_string = 'Bob Smith, São Paulo State University/Department of Production Engineering, Brazil James Smith, São Paulo State University/Department of Production Engineering, Brazil Bob James, São Paulo State University/Department of Production Engineering, Brazil'

def split_string_keep_delimiter(string_to_split, delimiter):
  result_list = []
  tokens = string_to_split.split(delimiter)
  for i in range(len(tokens) - 1):
    result_list.append(tokens[i] + delimiter)
  result_list.append(tokens[len(tokens)-1])
  return  result_list

# This is going to split your input text on the word Brazil
# the output is a list
split_input = split_string_keep_delimiter(input_string, "Brazil")
pprint(split_input)
# output
['Bob Smith, São Paulo State University/Department of Production '
'Engineering,Brazil',
'James Smith, São Paulo State University/Department of Production '
'Engineering,Brazil',
'Bob James, São Paulo State University/Department of Production '
'Engineering,Brazil',
'']

# This is going to split the previous list at the commas (,).
# the output is a nested list
results = [item.split(',') for item in split_input if len(item) > 0]
print (results)
# output
[['Bob Smith', ' São Paulo State University/Department of Production Engineering', ' Brazil'], [' James Smith', ' São Paulo State University/Department of Production Engineering', ' Brazil'], [' Bob James', ' São Paulo State University/Department of Production Engineering', ' Brazil']]

# This loops through the results and extracts 4 items from each list.
for item in results:
  name = item[0].strip()
  university_name = item[1].strip().split('/')[0]
  department = item[1].strip().split('/')[1]
  country = item[2].strip()
  print (f'{name} - {university_name} - {department} - {country}')
  # output
  Bob Smith - São Paulo State University - Department of Production Engineering - Brazil
  James Smith - São Paulo State University - Department of Production Engineering - Brazil
  Bob James - São Paulo State University - Department of Production Engineering - Brazil
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...