Предполагая, что все ваши данные структурированы так же, как на предоставленной фотографии, это должно работать:
import pandas as pd
df = pd.DataFrame(columns=["State", "RegionName"])
with open("example.txt") as f:
content = f.read()
lines = content.splitlines()
state_split_str = "[edit]"
region_split_str = "("
for line in lines:
if state_split_str in line:
state = line.split(state_split_str)[0].strip()
else:
region = line.split(region_split_str)[0].strip()
df = df.append({"State": state, "RegionName": region}, ignore_index=True)
print(df)
Результатом выше будет:
State RegionName
0 Alabama Auburn
1 Alabama Florence
2 Alabama Jacksonville
3 Alaska Fairbanks
Это работает, потому что мы знать, что всем школам в штате предшествует строка, содержащая название штата со знаком «[править]» рядом с ним. Мы просто проверяем, существует ли в строке «[edit]». Если это так, мы разбиваем на «[редактировать]» и переносим все влево (название состояния) через [0]
. Для удобства мы обрезаем новую строку от любых начальных / конечных пробелов. Это дает нам наше государство. Продолжая перебирать каждую строку, мы знаем, что если строка не содержит «[edit]», это школа, принадлежащая текущему значению нашей переменной «state».
Затем мы просто выполняем аналогичное разбиение на открывающую скобку каждой строки, и снова возьмите первый элемент списка, возвращенного с помощью split, чтобы получить имя региона, снова обрезая пробелы. Поскольку теперь у нас есть значения State и RegionName, мы можем добавить их в наш фрейм данных.
Это идеальное решение? Не совсем, потому что мы жестко кодируем значения в нашем коде, чтобы разделить имена столбцов / для добавления, но из-за формата ваших данных я не уверен, что есть лучшее решение.