Я использую regex и pandas для чтения строк текста в файле и выборочного извлечения данных в кадр данных.
Скажем, у меня есть следующая строка текста
Name : "Bob" Occupation : "Builder" Age : "42" Name : "Jim" Occupation : "" Age : "25"
IЯ хочу вставить всю эту информацию в информационный фрейм, чтобы она выглядела следующим образом:
Name Occupation Age
Bob Builder 42
Я хочу игнорировать чтение любой информации о втором человеке, потому что его занятие пустое.
Код:
with open(txt, 'r') as txt
for line in txt:
line = line.strip
a = re.findall(r'Name : \"(\S+)\"', line)
if a:
b = re.findall(r'Occupation : \"(\S+)\"', line)
if b:
c = re.findall(r'Age : \"(\S+)\"', line)
if c:
df = df.append({'Name' : a, 'Occupation' : b, 'Age' : c}, ignore_index = True)
Это вернет следующий (неправильный) фрейм данных
Name Occupation Age
["Bob", "Jim"] ["Builder"] ["42","25"]
Я хочу изменить этот код, чтобы он никогда не включал ситуацию, которая "Джим "находится в. То есть, если у человека нет" занятия ", то не читайте его информацию в кадре данных.Вы также можете видеть, что этот код неверен, потому что теперь он говорит, что у «Джима» есть Занятие «Строителя».
Если бы мне дали следующую строку текста:
Name : "Bob" Occupation : "Builder" Age : "42" Name : "Jim" Occupation : "" Age : "25" Name : "Steve" Occupation : "Clerk" Age : "110"
Полученный df будет:
Name Occupation Age
["Bob", "Steve"] ["Builder", "Clerk"] ["42","110"]
Это удобно, потому что я больше не буду сталкиваться с какими-либо проблемами индексации, поэтому я могу затем расширить этот df до своей конечной цели (знаю, как это сделать):
Name Occupation Age
Bob Builder 42
Steve Clerk 110