Python 创建新列并检查字符串值,但出现类型错误

Python 创建新列并检查字符串值,但出现类型错误,python,regex,pandas,Python,Regex,Pandas,我需要创建两个带有布尔值或Yes/No值的新列,以测试链接是否包含某个单词。从我的csv文件中,数据集示例如下所示: Col1 0 Dom.ie 1 Bho.int 2 Manchester.co.uk ... ...

我需要创建两个带有布尔值或Yes/No值的新列,以测试链接是否包含某个单词。从我的csv文件中,数据集示例如下所示:

                Col1                    
0                        Dom.ie    
1                       Bho.int       
2              Manchester.co.uk      
...                         ...      


[1800 rows x 12 columns]
如果Col1中的值包含或不包含某个单词,我想创建这两个新列,
Check_1
Check_2
;例如:

list_1= ['dom', 'ans', 'warm']
list_2= ['dom', 'dog', 'manchester']

                Col1                     Check_1      Check_2                     
0                        dom.ie        Yes             Yes
1                       bho.int        No               No
2              manchester.co.uk        No              Yes
...                         ...        ...


[1800 rows x 14 columns]
我试过:

import pandas as pd
import numpy as np  

def part_is_in(x, values):
output = 'No'
for val in values:
    if val in x:
        return 'Yes'
        break                
return output

df['Check_1'] = df['Col1'].apply(part_is_in, values = list_1)
df['Check_2'] = df['Col1'].apply(part_is_in, values = list_2)
但是,我得到了以下错误:

TypeError:类型为“float”的参数不可编辑

与以下内容相关:
df['Check_1']=df['Col1']。应用(part_is_in,values=list_1)
,如果val在x中,则应用到

你能告诉我这是什么意思吗?我怎样才能修好它?谢谢你

以下是我使用str.contains的方法

s = df['Col1'].str.lower()
all_lsts = [list_1, list_2]

for i,lst in enumerate(all_lsts, start=1):
    df[f'Check_{i}'] = s.str.contains('|'.join(lst))
输出:

               Col1  Check_1  Check_2
0            Dom.ie     True     True
1           Bho.int    False    False
2  Manchester.co.uk    False     True

以下是我使用
str.contains
的方法:

s = df['Col1'].str.lower()
all_lsts = [list_1, list_2]

for i,lst in enumerate(all_lsts, start=1):
    df[f'Check_{i}'] = s.str.contains('|'.join(lst))
输出:

               Col1  Check_1  Check_2
0            Dom.ie     True     True
1           Bho.int    False    False
2  Manchester.co.uk    False     True
IIUC

IIUC


这些解决方案没有找到错误的根源。您没有发布所有的数据,但我猜测Col1中可能有一些浮点数,这会在调用x中的
if val
时导致错误。具有Object dtype的列中可以包含混合类型(关于此问题的详细概述,请参阅)


测试这一点的一个简单方法是,如果str(x)中的val,则将其更改为
,或者,根据您的pandas版本,您可以使用
to_string将整个列转换为string
这些解决方案无法找到错误的根源。您没有发布所有的数据,但我猜测Col1中可能有一些浮点数,这会在调用x中的
if val
时导致错误。具有Object dtype的列中可以包含混合类型(关于此问题的详细概述,请参阅)


一个简单的测试方法是,如果str(x)
中的val为
,则将其更改为
,或者,根据您的pandas版本,您可以使用
to_string将整个列转换为string

感谢您的回答和帮助。如果我想单独填充(不使用
df[f'Check{I}]
df=df.join(s.add_prefix('Check}'))
,我该怎么做?如果列的名称可能不同(这将会发生,并且希望使用您的代码填充新列,以防万一?感谢您的回答和帮助。如果我想单独填充(不使用
df[f'Check{I}]
df=df.join(s.add_prefix('Check}'))
,我该怎么做?如果列的名称可能不同的话(这将发生,并且希望使用您的代码填充新列,以防万一?非常感谢您的回答Eric。它可以通过
str(x)
进行更改。非常感谢您的回答Eric。它可以通过
str(x)
进行更改。)。