Проверка заполнения колонки данных и поиск по строке - PullRequest
0 голосов
/ 10 февраля 2020

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

      import pandas as pd
      import re

      df = pd.DataFrame({'Column_01': ['Press', 'Temp', '', 'Strain gauge', 'Ultrassonic', ''], 
                         'Column_02': ['five', 'two', 'five', 'five', 'three', 'three']})

Сначала я хотел бы проверить, заполнен ли столбец «Столбец_01». Если заполнено поле «Столбцы_01» ИЛИ «Столбец_02» содержит слова «один», «два», «три». Новый столбец (классификатор) получит «SENSOR».

Чтобы идентифицировать строку «Column_02», я реализовал следующий код:

     df['Classifier'] = df.apply(lambda x: 'SENSOR'
                        if re.search(r'one|two|three', x['Column_02'])
                        else 'Nan', axis = 1)

Этот код работает. Он отлично находит строку в строке dataframe. Тем не менее, мне также нужно было проверить, что 'Column_01' заполнен. Я не могу использовать функцию notnull () для решения проблемы.

Я хотел бы, чтобы вывод был:

      Column_01      Column_02  Classifier
         Press         five        SENSOR        #current line of Column_01 completed
         Temp           two        SENSOR        #current line of Column_02 completed; string 'two'
                        five        Nan                    
    Strain gauge        five       SENSOR        #current line of Column_01 completed
     Ultrassonic        three      SENSOR        #current line of Column_01 completed; string 'three' 
                        three      SENSOR        #string 'three'

1 Ответ

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

Как правило, вам следует избегать .apply() (ref { ссылка }).

Это должно помочь:

import numpy as np

df["Classifier"]=np.where(df["Column_01"].fillna('').ne('')|df["Column_02"].str.contains("(one)|(two)|(three)"), "SENSOR", np.nan)

Выходы:

      Column_01 Column_02 Classifier
0         Press      five     SENSOR
1          Temp       two     SENSOR
2                    five        nan
3  Strain gauge      five     SENSOR
4   Ultrassonic     three     SENSOR
5                   three     SENSOR
...