我有这个数据框:
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'>
我怎么能这样做?
答案 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"