TypeError:find()至少接受1个参数(给定0个)

2024-06-25 23:42:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个虚拟数据集

 df = pd.DataFrame(['Braund, Mr. Owen Harris','Cumings, Mrs.John','Heikkinen, Miss. Lainia', 'Futerelle, Mrs. Jacques Health', 'Allen, Mr. William Henry'], columns=['Names'])

哪一个有头

     Names
0   Braund, Mr. Owen Harris
1   Cumings, Mrs.John
2   Heikkinen, Miss. Lainia
3   Futerelle, Mrs. Jacques Health
4   Allen, Mr. William Henry

我试图解决一个虚拟问题,在这个问题中,我查找由该代码产生的第一列的索引

df['Names'].apply(str.find(',')) 

但它给出了以下错误

TypeError: find() takes at least 1 argument (0 given)

我能知道为什么即使我提供了论点也会出现这个错误吗


Tags: dfnamesjohnmrhealthmrsharrismiss
3条回答

两个主要问题:

  1. 您试图以静态方式调用find(从str类而不是实例),在这种情况下,它需要两个参数(字符串和子字符串)

  2. .apply接受一个函数,并给它一个整数(假定的str.find输出)

Pandas提供了一个^{} accessor,它公开了最常见的str方法,并以矢量化的方式应用它们:

print(df.Names.str.find(','))

输出

0    6
1    7
2    9
3    9
4    5
Name: Names, dtype: int64

您仍然可以使用Python的str.find,但必须创建一个自定义lambda:

print(df.Names.apply(lambda string: string.find(',')))

也输出

0    6
1    7
2    9
3    9
4    5
Name: Names, dtype: int64

但是使用str访问器(或任何其他可用的访问器,或pandas方法)几乎总是比传递给.apply的lambda更有效


当然,在这两种情况下,您都可以将结果重新分配回新列:


df['First Comma Index'] = df.Names.str.find(',')
df['First Comma Index'] = df.Names.apply(lambda string: string.find(','))

您可以直接使用df['Names'].str访问列或序列的字符串方法。这将允许您执行df['Names'].str.find(",")

之所以会出现错误,是因为这里的“str”只是类,而不是任何特定的字符串,所以它需要一个底层字符串来查找,但找不到任何字符串

您可以按如下方式循环以获得结果-

代码-

for i in range(len(df)):
    string = df['Names'][i]
    df['Index'][i] = string.find(',',0,len(string))

输出

enter image description here

相关问题 更多 >