Поиск определенного числа c с использованием регулярного выражения - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть следующий фрейм данных:

      import pandas as pd
      import re

      df = pd.DataFrame({'Column_01': ['00001RX', '8254TX sensor', '8Actuador', '8 Sensor'],
                         'Column_02': ['AAA', 'BBB', 'CCC', 'DDD']})

Я бы хотел go через 'Column_01' и проверить, начинается ли строка с цифры 8. Если для true, мне нужен новый столбец ' Столбец_03 ', чтобы получить слово' НАЙТИ '. В противном случае получите «NaN».

Я попытался реализовать следующий код. Однако это неправильно:

     df['Column_03'] = df.apply(lambda x: 'FINDING'
                       if re.match(r'\d[8]', x['Column_01'])
                       else np.NaN, axis = 1)

Мой вывод:

        Column_01        Column_02  Column_03
         00001RX            AAA      NaN
         8254TX sensor      BBB      NaN
        8Actuador           CCC      NaN
         8 Sensor           DDD      NaN

Требуемый вывод:

         Column_01       Column_02  Column_03
         00001RX            AAA      NaN
         8254TX sensor      BBB      FINDING
        8Actuador           CCC      FINDING
         8 Sensor           DDD      FINDING

Ответы [ 2 ]

2 голосов
/ 12 февраля 2020

Вы можете попробовать это.

df['Column_03'] = ['Finding' if i.startswith('8') else np.nan for i in df['Column_01']]
print(df)

       Column_01 Column_02 Column_03
0        00001RX       AAA       NaN
1  8254TX sensor       BBB   Finding
2      8Actuador       CCC   Finding
3       8 Sensor       DDD   Finding

Если вы хотите использовать re, проверьте ответ @ lwileczek.

Вот еще один re подход.

df['Column_03'] = df.apply(lambda x: 'FINDING'
               if re.match(r'\b8', x['Column_01'])
               else np.NaN, axis = 1)
2 голосов
/ 12 февраля 2020

проблема с вашим кодом в том, что он ищет любой шаблон, в котором у вас есть ди git [0-9], за которым следует 8. Что вы хотите иметь, это

df['Column_03'] = df.apply(lambda x: 'FINDING'
                   if re.match(r'^8', x['Column_01'])
                   else np.NaN, axis = 1)

, который проверит что 8 это первый символ. ^ означает начало строки, а затем вы можете просто поставить 8.

, как @ Ch3steR сказал, что вы также можете использовать str.startswith('8')

Весь пример

import re
import numpy as np
import pandas as pd
df = pd.DataFrame({'Column_01': ['00001RX', '8254TX sensor', '8Actuador', '8 Sensor'],
                     'Column_02': ['AAA', 'BBB', 'CCC', 'DDD']})

df['Column_03'] = df.apply(lambda x: 'FINDING'
               if re.match(r'^8', x['Column_01'])
               else np.NaN, axis = 1)
print(df)

>>>
       Column_01 Column_02 Column_03
0        00001RX       AAA       NaN
1  8254TX sensor       BBB   FINDING
2      8Actuador       CCC   FINDING
3       8 Sensor       DDD   FINDING
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...