Преобразовать столбец с плавающей точкой в ​​строку и проверить наличие строки в Pandas - PullRequest
0 голосов
/ 05 мая 2018

У меня есть этот фрейм данных:

   cnpj             Porte
0  453232000125 
1  11543123000156
2  345676
3  121234561023456

'cnpj' в настоящее время как float.

Если в cnpj есть «0001», я хочу классифицировать «Porte» как A. Так это выглядит так:

   cnpj             Porte
0  453232000125     A
1  11543123000156   A
2  345676
3  121234561023456

Я пытаюсь:

 df['Porte'].loc[(df['cnpj'].astype(int).astype(str).str.contains('0001'))]='A'

Но я получаю эту ошибку:

TypeError: cannot convert the series to <class 'int'>

Как я мог это сделать?

Ответы [ 3 ]

0 голосов
/ 05 мая 2018

Другой подход:

df = pd.DataFrame({"cnpj": [453232000125, 11543123000156, 345676, 121234561023456]})
df['Porte'] = np.where(df['cnpj'].astype(str).str.contains('0001'), 'A', '')

Выход:

              cnpj Porte
0     453232000125     A
1   11543123000156     A
2           345676      
3  121234561023456      
0 голосов
/ 05 мая 2018

Вы были очень близки. Просто удалите оператор astype(int).

df['Porte'].loc[(df['cnpj'].astype(str).str.contains('0001')]='A'

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

df.loc[df['cnpj'].astype(str).str.contains('0001'), 'Porte'] = "A"
0 голосов
/ 05 мая 2018

Это один подход.

Демо:

import pandas as pd
import numpy as np
df = pd.DataFrame({"cnpj": [453232000125, 11543123000156, 345676]})
df["Porte"] = df["cnpj"].apply(lambda x: "A" if '0001' in str(x) else np.nan)
print(df)

Выход:

             cnpj Porte
0    453232000125     A
1  11543123000156     A
2          345676   NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...