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