我有一个虚拟数据集
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)
我能知道为什么即使我提供了论点也会出现这个错误吗
两个主要问题:
您试图以静态方式调用
find
(从str
类而不是实例),在这种情况下,它需要两个参数(字符串和子字符串).apply
接受一个函数,并给它一个整数(假定的str.find
输出)Pandas提供了一个^{} accessor ,它公开了最常见的
str
方法,并以矢量化的方式应用它们:输出
您仍然可以使用Python的
str.find
,但必须创建一个自定义lambda:也输出
但是使用
str
访问器(或任何其他可用的访问器,或pandas方法)几乎总是比传递给.apply
的lambda更有效当然,在这两种情况下,您都可以将结果重新分配回新列:
您可以直接使用
df['Names'].str
访问列或序列的字符串方法。这将允许您执行df['Names'].str.find(",")
之所以会出现错误,是因为这里的“str”只是类,而不是任何特定的字符串,所以它需要一个底层字符串来查找,但找不到任何字符串
您可以按如下方式循环以获得结果-
代码-
输出
相关问题 更多 >
编程相关推荐