извлечь первую последовательность чисел из столбца pandas

Вопрос или проблема

Я импортировал 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(). Эффективное извлечение данных позволяет излечь целевые значения, такие как число, и выполнить необходимую очистку для последующего анализа.

Пошаговое Руководство

  1. Импортируйте необходимые библиотеки:
    Убедитесь, что у вас установлен pandas и импортируйте его.

    import pandas as pd
  2. Загрузите данные из CSV:
    Предположим, что у вас есть файл CSV, который вы хотите загрузить в DataFrame.

    df = pd.read_csv('your_file.csv')
  3. Используйте метод str.extract() для извлечения чисел:
    Для извлечения первой последовательности чисел после слова NBU или просто первой последовательности чисел в строке, вы можете использовать регулярное выражение. В данном случае будет уместно использовать следующую регулярную строку:

    df['extracted_numbers'] = df['col'].str.extract(r'(?i)(?:NBU[-/\s]*)?(\d+)')

    Здесь:

    • (?i) – делает регулярное выражение нечувствительным к регистру, что позволяет захватывать как NBU, так и nbu.
    • (?:...) – это необязательная группа (non-capturing group), которая ищет NBU, перед которым могут следовать символы -, / или пробел.
    • (\d+) – захватывает одну или более последовательностей цифр, которые и являются целевыми значениями.
  4. Обработка и вывод данных:
    После выполнения извлечения, вы получите новый столбец с первой последовательностью чисел.

    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-файлов и других источников, обеспечивая высокую степень универсальности и гибкости для анализа.

Оцените материал
Добавить комментарий

Капча загружается...