猿问

pandas 中的子字符串函数

检查 pandas 字段中是否包含字符串的正确方法是什么?例如,我有:

np.where('DIGITAL_SOURCE' in df['file_name'], 1, 0)

但我收到 Pandas 的以下投诉:

类型错误:“系列”对象是可变的,因此它们不能被散列

正确的做法是什么substr in str?我相信正确的答案是使用str.contains,但在语法上遇到了一些问题。


绝地无双
浏览 164回答 3
3回答

MYYA

如注释中所述,您可以使用.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  contains0  DIGITAL_SOURCE         11          Other1         02          Other3         0

MMTTMM

你应该做isinnp.where( df['file_name'].isin(['DIGITAL_SOURCE']), 1, 0) #df['file_name'].isin(['DIGITAL_SOURCE']).astype(int)

慕尼黑8549860

您还可以应用 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_name0   USA        DIGITAL1   USA        DIGITAL2   USA        DIGITAL3   USA        DIGITAL4   JAPAN      DIGITAL_SOURCE5   JAPAN      DIGITAL_SOURCEdf['new_cl'] = df.apply(lambda x: 1 if 'DIGITAL_SOURCE' in x['file_name'] else 0, axis=1 )    LOCATION    file_name      new_cl0   USA          DIGITAL        01   USA          DIGITAL        02   USA          DIGITAL        03   USA          DIGITAL        04   JAPAN        DIGITAL_SOURCE 15   JAPAN        DIGITAL_SOURCE 1
随时随地看视频慕课网APP

相关分类

Python
我要回答