为了账号安全,请及时绑定邮箱和手机立即绑定

pandas 中的子字符串函数

pandas 中的子字符串函数

绝地无双 2023-12-08 17:09:30
检查 pandas 字段中是否包含字符串的正确方法是什么?例如,我有:np.where('DIGITAL_SOURCE' in df['file_name'], 1, 0)但我收到 Pandas 的以下投诉:类型错误:“系列”对象是可变的,因此它们不能被散列正确的做法是什么substr in str?我相信正确的答案是使用str.contains,但在语法上遇到了一些问题。
查看完整描述

3 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

如注释中所述,您可以使用.str.contains(注意regex=False, 不将字符串视为正则表达式):


df = pd.DataFrame({'file_name': ['DIGITAL_SOURCE', 'Other1', 'Other3']})


df['contains'] = df['file_name'].str.contains('DIGITAL_SOURCE', regex=False).astype(int)

print(df)

印刷:


        file_name  contains

0  DIGITAL_SOURCE         1

1          Other1         0

2          Other3         0


查看完整回答
反对 回复 2023-12-08
?
MMTTMM

TA贡献1869条经验 获得超4个赞

你应该做isin

np.where( df['file_name'].isin(['DIGITAL_SOURCE']), 1, 0)
#df['file_name'].isin(['DIGITAL_SOURCE']).astype(int)


查看完整回答
反对 回复 2023-12-08
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

您还可以应用 lambda,这样:


 df['new_column'] = df.apply(lambda x: 1 if 'DIGITAL_SOURCE' in x['file_name'] else 0, axis=1 )

例子:


df = pd.DataFrame({"LOCATION":["USA","USA","USA","USA","JAPAN","JAPAN"],"file_name":["DIGITAL","DIGITAL","DIGITAL","DIGITAL","DIGITAL_SOURCE","DIGITAL_SOURCE"]})

 


    LOCATION    file_name

0   USA        DIGITAL

1   USA        DIGITAL

2   USA        DIGITAL

3   USA        DIGITAL

4   JAPAN      DIGITAL_SOURCE

5   JAPAN      DIGITAL_SOURCE



df['new_cl'] = df.apply(lambda x: 1 if 'DIGITAL_SOURCE' in x['file_name'] else 0, axis=1 )



    LOCATION    file_name      new_cl

0   USA          DIGITAL        0

1   USA          DIGITAL        0

2   USA          DIGITAL        0

3   USA          DIGITAL        0

4   JAPAN        DIGITAL_SOURCE 1

5   JAPAN        DIGITAL_SOURCE 1


查看完整回答
反对 回复 2023-12-08
  • 3 回答
  • 0 关注
  • 127 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信