Pandas имеет свои собственные методы, относящиеся к Regex , поэтому «более пандазонным» способом написания кода является использование их вместо собственных re методов. .
Рассмотрим такой пример исходных данных:
End station
0 4055 Johnson Street, Chicago
1 203 Mayflower Avenue, Columbus
Чтобы найти улицу № по вышеуказанным адресам, запустите:
df['End station'].str.extract(r'(?P<StreetNo>\d{,5})')
и вы получите:
StreetNo
0 4055
1 203
Обратите также внимание, что улица № может быть короче , чем 5 цифр, но вы пытаетесь сопоставить последовательность, состоящую всего из 5 цифр.
Еще один странный момент в вашем коде: почему вы компилируете регулярные выражения в цикле, а затем не используете их?
Edit
После более тщательного изучения вашего кода у меня есть парадополнительных замечаний.
Когда вы пишете:
for x in df:
...
, цикл фактически повторяется по именам столбцов (не строкам).
Еще одна странностьСуть в вашем коде заключается в том, что переменная x , изначально используемая для хранения имени столбца, используется снова для сохранения скомпилированного регулярного выражения. Это плохой привычка. Переменные должны использоваться для хранения одного четко определенного объекта в каждом из них.
А что касается итерации по строкам, вы можете использовать, например,
for idx, row in df.iterrows():
...
Но обратите внимание, что iterrows возвращает пар , состоящих из:
- индекса текущей строки,
- самой строки.
Тогда(в цикле) вы, вероятно, будете ссылаться на отдельные столбцы этой строки.