擅长:python、mysql、java
<p>两个主要问题:</p>
<ol>
<li><p>您试图以静态方式调用<code>find</code>(从<code>str</code>类而不是实例),在这种情况下,它需要两个参数(字符串和子字符串)</p>
</li>
<li><p><code>.apply</code>接受一个函数,并给它一个整数(假定的<code>str.find</code>输出)</p>
</li>
</ol>
<p>Pandas提供了一个<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.html" rel="nofollow noreferrer">^{<cd2>} accessor</a>,它公开了最常见的<code>str</code>方法,并以矢量化的方式应用它们:</p>
<pre><code>print(df.Names.str.find(','))
</code></pre>
<p>输出</p>
<pre><code>0 6
1 7
2 9
3 9
4 5
Name: Names, dtype: int64
</code></pre>
<p>您仍然可以使用Python的<code>str.find</code>,但必须创建一个自定义lambda:</p>
<pre><code>print(df.Names.apply(lambda string: string.find(',')))
</code></pre>
<p>也输出</p>
<pre><code>0 6
1 7
2 9
3 9
4 5
Name: Names, dtype: int64
</code></pre>
<p>但是使用<code>str</code>访问器(或任何其他可用的访问器,或pandas方法)几乎总是比传递给<code>.apply</code>的lambda更有效</p>
<br/>
<p>当然,在这两种情况下,您都可以将结果重新分配回新列:</p>
<br/>
<pre><code>df['First Comma Index'] = df.Names.str.find(',')
df['First Comma Index'] = df.Names.apply(lambda string: string.find(','))
</code></pre>