Создайте функцию из логики для фрейма данных

#python #regex #pandas #function

Вопрос:

У меня есть Df, как это

       Name     PAN
 0    x     BBDFW7894Q 
 1    s         
 2    A     QWE7892E
 

я хочу, чтобы df был таким после проверки номера лотка

      Name     PAN           PAN_Status
 0    x     BBDFW7894Q      Valid PAN number
 1    s                     PAN is not present
 2    A     QWE7892E        Invalid PAN number
 

я пытаюсь использовать нижеприведенную логику

 df["PAN_Status"] = ["Valid PAN number" if re.match(r'^[A-Z]{5}[0-9]{4}[A-Z]

но мне нужна функция для этого


Ответ №1:

Используйте numpy.select с Series.str.match и для второго условия проверяется пропущенные значения или строки emty:

 m1 = df["PAN"].str.match(r'^[A-Z]{5}[0-9]{4}[A-Z]

Решение с функцией:

 def test(ele):
    if (ele.strip() =='') or pd.isna(ele):
        return "PAN is not present"
    elif re.match(r'^[A-Z]{5}[0-9]{4}[A-Z]


Комментарии:

1. сэр ,вы всегда правы, но мне нужна функция типа 'def (): возврат кода'

2. @user14784453 - Готово. Если мой ответ(ы) был полезен, не забудьте принять его. Спасибо.

3. @user14784453 - Чтобы отметить ответ как принятый, нажмите на галочку рядом с ответом, чтобы переключить его с пустого на зеленый ( см. скриншот ). Спасибо.

,ele)
else ("PAN is not present"if ele==' ' else "Not Valid PAN") for ele in
но мне нужна функция для этого

Ответ №1:

Используйте numpy.select с Series.str.match и для второго условия проверяется пропущенные значения или строки emty:


Решение с функцией:


Комментарии:

1. сэр ,вы всегда правы, но мне нужна функция типа 'def (): возврат кода'

2. @user14784453 - Готово. Если мой ответ(ы) был полезен, не забудьте принять его. Спасибо.

3. @user14784453 - Чтобы отметить ответ как принятый, нажмите на галочку рядом с ответом, чтобы переключить его с пустого на зеленый ( см. скриншот ). Спасибо.

, na=False)
m2 = df["PAN"].str.strip().eq('') | df['PAN'].isna()

df["PAN_Status"] = np.select([m1, m2],
['Valid PAN number','PAN is not present'],
'Not Valid PAN')
Решение с функцией:


Комментарии:

1. сэр ,вы всегда правы, но мне нужна функция типа 'def (): возврат кода'

2. @user14784453 - Готово. Если мой ответ(ы) был полезен, не забудьте принять его. Спасибо.

3. @user14784453 - Чтобы отметить ответ как принятый, нажмите на галочку рядом с ответом, чтобы переключить его с пустого на зеленый ( см. скриншот ). Спасибо.

,ele)
else ("PAN is not present"if ele==' ' else "Not Valid PAN") for ele in

но мне нужна функция для этого

Ответ №1:

Используйте numpy.select с Series.str.match и для второго условия проверяется пропущенные значения или строки emty:


Решение с функцией:


Комментарии:

1. сэр ,вы всегда правы, но мне нужна функция типа ‘def (): возврат кода’

2. @user14784453 — Готово. Если мой ответ(ы) был полезен, не забудьте принять его. Спасибо.

3. @user14784453 — Чтобы отметить ответ как принятый, нажмите на галочку рядом с ответом, чтобы переключить его с пустого на зеленый ( см. скриншот ). Спасибо.

,ele):
return «Valid PAN number»
else:
return «Not Valid PAN»

df[«PAN_Status»] = df[«PAN»].apply(test)
print (df)
Name PAN PAN_Status
0 x BBDFW7894Q Valid PAN number
1 s NaN PAN is not present
2 A QWE7892E Not Valid PAN

Комментарии:

1. сэр ,вы всегда правы, но мне нужна функция типа ‘def (): возврат кода’

2. @user14784453 — Готово. Если мой ответ(ы) был полезен, не забудьте принять его. Спасибо.

3. @user14784453 — Чтобы отметить ответ как принятый, нажмите на галочку рядом с ответом, чтобы переключить его с пустого на зеленый ( см. скриншот ). Спасибо.

,ele)
else («PAN is not present»if ele==’ ‘ else «Not Valid PAN») for ele in

но мне нужна функция для этого

Ответ №1:

Используйте numpy.select с Series.str.match и для второго условия проверяется пропущенные значения или строки emty:


Решение с функцией:


Комментарии:

1. сэр ,вы всегда правы, но мне нужна функция типа ‘def (): возврат кода’

2. @user14784453 — Готово. Если мой ответ(ы) был полезен, не забудьте принять его. Спасибо.

3. @user14784453 — Чтобы отметить ответ как принятый, нажмите на галочку рядом с ответом, чтобы переключить его с пустого на зеленый ( см. скриншот ). Спасибо.

, na=False)
m2 = df[«PAN»].str.strip().eq(») | df[‘PAN’].isna()

df[«PAN_Status»] = np.select([m1, m2],
[‘Valid PAN number’,’PAN is not present’],
‘Not Valid PAN’)

Решение с функцией:


Комментарии:

1. сэр ,вы всегда правы, но мне нужна функция типа ‘def (): возврат кода’

2. @user14784453 — Готово. Если мой ответ(ы) был полезен, не забудьте принять его. Спасибо.

3. @user14784453 — Чтобы отметить ответ как принятый, нажмите на галочку рядом с ответом, чтобы переключить его с пустого на зеленый ( см. скриншот ). Спасибо.

,ele)
else («PAN is not present»if ele==’ ‘ else «Not Valid PAN») for ele inно мне нужна функция для этого

Ответ №1:

Используйте numpy.select с Series.str.match и для второго условия проверяется пропущенные значения или строки emty:


Решение с функцией:


Комментарии:

1. сэр ,вы всегда правы, но мне нужна функция типа ‘def (): возврат кода’

2. @user14784453 — Готово. Если мой ответ(ы) был полезен, не забудьте принять его. Спасибо.

3. @user14784453 — Чтобы отметить ответ как принятый, нажмите на галочку рядом с ответом, чтобы переключить его с пустого на зеленый ( см. скриншот ). Спасибо.