Вопрос или проблема
Я импортировал CSV в DataFrame pandas; однако столбец, который мне нужно использовать, имеет свободный формат и находится в плохом состоянии.
Мне нужно извлечь первую серию цифр после слова NBU или первую серию цифр в строке. См. некоторые примеры ниже:-
nbu 123456
NBU-123456
nbu/ 123456 blah12
123456
123456_123
Все вышеперечисленное должно быть очищено, чтобы получить 123456. Обратите внимание, что количество возвращаемых целых чисел основывается на том, сколько их в непрерывной последовательности; т.е. nbu12 3455 должно вернуть только 12.
Затем я использую что-то подобное, чтобы исправить данные:-
df['col'] = df['col'].str.
Возможное решение, которое работает следующим образом: оно использует метод str.extract
для извлечения цифр из столбца col
DataFrame df
, где в r'(\d+)'
скобки обозначают группу захвата, а \d+
означает одну или более цифр.
df['col'].str.extract(r'(\d+)')
Вывод:
0
0 123456
1 123456
2 123456
3 123456
4 123456
Ответ или решение
Для извлечения первой последовательности чисел из столбца Pandas DataFrame, содержащего свободные форматы текста и различные сочетания символов, вы можете использовать метод str.extract()
. Эффективное извлечение данных позволяет излечь целевые значения, такие как число, и выполнить необходимую очистку для последующего анализа.
Пошаговое Руководство
-
Импортируйте необходимые библиотеки:
Убедитесь, что у вас установлен pandas и импортируйте его.import pandas as pd
-
Загрузите данные из CSV:
Предположим, что у вас есть файл CSV, который вы хотите загрузить в DataFrame.df = pd.read_csv('your_file.csv')
-
Используйте метод
str.extract()
для извлечения чисел:
Для извлечения первой последовательности чисел после словаNBU
или просто первой последовательности чисел в строке, вы можете использовать регулярное выражение. В данном случае будет уместно использовать следующую регулярную строку:df['extracted_numbers'] = df['col'].str.extract(r'(?i)(?:NBU[-/\s]*)?(\d+)')
Здесь:
(?i)
– делает регулярное выражение нечувствительным к регистру, что позволяет захватывать какNBU
, так иnbu
.(?:...)
– это необязательная группа (non-capturing group), которая ищетNBU
, перед которым могут следовать символы-
,/
или пробел.(\d+)
– захватывает одну или более последовательностей цифр, которые и являются целевыми значениями.
-
Обработка и вывод данных:
После выполнения извлечения, вы получите новый столбец с первой последовательностью чисел.print(df[['col', 'extracted_numbers']])
Примеры использования
Рассмотрим несколько примеров для зависимости от формата данных в вашем столбце. Для тестирования работоспособности описанного подхода можно использовать следующее:
data = {
'col': [
'nbu 123456',
'NBU-123456',
'nbu/ 123456 blah12',
'123456',
'123456_123',
'nbu12 3455'
]
}
df = pd.DataFrame(data)
df['extracted_numbers'] = df['col'].str.extract(r'(?i)(?:NBU[-/\s]*)?(\d+)')
print(df[['col', 'extracted_numbers']])
Вывод
Используя вышеуказанный подход, вывод вашего DataFrame будет примерно таким:
col extracted_numbers
0 nbu 123456 123456
1 NBU-123456 123456
2 nbu/ 123456 blah12 123456
3 123456 123456
4 123456_123 123456
5 nbu12 3455 12
Заключение
При помощи метода str.extract()
и регулярных выражений вы можете легко извлечь первую последовательность чисел из столбца DataFrame, независимо от того, в каком формате представлены данные. Это решение хорошо подходит для обработки данных из CSV-файлов и других источников, обеспечивая высокую степень универсальности и гибкости для анализа.