将float列转换为字符串并在Pandas中测试字符串的存在

时间:2018-05-05 15:38:57

标签: python pandas

我有这个数据框:

   cnpj             Porte
0  453232000125 
1  11543123000156
2  345676
3  121234561023456

' CNPJ'目前正在浮动。

如果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 :(得分:2)

这是一种方法。

<强>演示:

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

答案 1 :(得分:2)

另一种方法:

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      

答案 2 :(得分:1)

你非常接近。只需删除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"