Поиск шаблона слова в начале и конце строки данных - PullRequest
0 голосов
/ 11 февраля 2020

Я обрабатываю следующий фрейм данных:

     import pandas as pd

     dataframe = pd.DataFrame({'Column_01': ['Sensor with 0005-fdk', 'Sensor with RX simpleleak', 
                                             'Actuador', 'Sensor with TX xxx', 
                                             'SENSOR WITH Press OL SimplePack'], 
                               'Column_02': ['000', '001', '010', '011', '100']})

Мне нужно создать новый столбец в фрейме данных выше. Этот новый столбец получит значение «DETECT», если соответствующая строка в «Column_01» начинается с (Sensor with или SENSOR WITH) и заканчивается (SimplePack или simplepack). В противном случае строка получит Nan.

Я обнаружил, что функция match () проверяет, соответствует ли регулярное выражение началу текста. Итак, я попытался реализовать следующий код:

        dataframe['Column_03'] = dataframe.apply(lambda x: 'DETECT'
                                     if re.match(r'Sensor with|SENSOR WITH', x['Column_01'])
                                     else 'Nan', axis = 1)

Однако для этой проблемы код неполон, поскольку он не проверяет окончательное регулярное выражение.

Мой вывод:

      Column_01                   Column_02          Column_03
Sensor with 0005-fdk                 000               DETECT
Sensor with RX simpleleak            001               DETECT
Actuador                             010                Nan
Sensor with TX xxx                   011               DETECT
SENSOR WITH Press OL SimplePack      100               DETECT

Я бы хотел, чтобы результат был:

       Column_01                      Column_02          Column_03
Sensor with 0005-fdk                  000                  Nan
Sensor with RX simpleleak             001                  Nan
Actuador                              010                  Nan
Sensor with TX xxx                    011                  Nan
SENSOR WITH Press OL SimplePack       100                DETECT

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

попробуйте это:

dataframe['Column_03']=\
dataframe['Column_01'].apply(lambda x: 'DETECT' if \
str(x).lower().startswith('sensor with')  and \
str(x).lower().endswith('simplepack') else 'Nan')

вывод:

                         Column_01 Column_02 Column_03
0             Sensor with 0005-fdk       000       Nan
1        Sensor with RX simpleleak       001       Nan
2                         Actuador       010       Nan
3               Sensor with TX xxx       011       Nan
4  SENSOR WITH Press OL SimplePack       100    DETECT

Что соответствует тому, что you wrote:

"Этот новый столбец будет получить значение 'DETECT', если соответствующая строка в 'Column_01' начинается с (Sensor with или SENSOR WITH) и заканчивается (SimplePack или simplepack). В противном случае строка получит Nan ".

Вы ожидаете, что люди чтобы помочь вам, пожалуйста, по крайней мере, пересмотреть ваш вопрос.

0 голосов
/ 11 февраля 2020

.apply() здесь не обязательно. Это решение также использует правильные значения NaN, а не строки.

import pandas as pd

df = pd.DataFrame({'Column_01': ['Sensor with 0005-fdk', 'Sensor with RX simpleleak',
                                 'Actuador', 'Sensor with TX xxx',
                                 'SENSOR WITH Press OL SimplePack', 'Sensor with RX simplepack',
                                 'sensor With simplepack'],
                   'Column_02': ['000', '001', '010', '011', '100', '101', '110']})

print(df, end='\n\n\n')

row_cond = df['Column_01'].str.casefold().str.match(r"^sensor with(?! rx).*simplepack$", case=False)

df.loc[row_cond, 'Column_03'] = 'DETECT'

print(df)

Вывод:

                         Column_01 Column_02
0             Sensor with 0005-fdk       000
1        Sensor with RX simpleleak       001
2                         Actuador       010
3               Sensor with TX xxx       011
4  SENSOR WITH Press OL SimplePack       100
5        Sensor with RX simplepack       101
6           sensor With simplepack       110


                         Column_01 Column_02 Column_03
0             Sensor with 0005-fdk       000       NaN
1        Sensor with RX simpleleak       001       NaN
2                         Actuador       010       NaN
3               Sensor with TX xxx       011       NaN
4  SENSOR WITH Press OL SimplePack       100    DETECT
5        Sensor with RX simplepack       101       NaN
6           sensor With simplepack       110    DETECT
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...