<p>您可以通过以下步骤执行此操作:</p>
<ol>
<li>首先,用空字符串替换<code>NaN</code>值(我们也可以在删除字符后得到空字符串,然后将其转换回<code>NaN</code>)</李>
<li>如果列中的某些元素是非字符串,则通过<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.astype.html" rel="nofollow noreferrer">^{<cd3>}</a>将列强制转换为字符串类型</李>
<li>用正则表达式<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.replace.html" rel="nofollow noreferrer">^{<cd4>}</a>替换非alpha和非空的空字符串</li>
<li>最后,将空字符串替换为<code>NaN</code>为<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.replace.html" rel="nofollow noreferrer">^{<cd6>}</a></li>
</ol>
<p>(注意:前两个步骤是针对OP获取<code>AttributeError: Can only use .str accessor with string values!</code>的问题的特殊处理,尽管我专门添加整数和浮点(不是字符串中的整数和浮点,而是实数值)的测试在没有前两个步骤的情况下也没有问题。可能是其他一些特殊数据类型!)没有相同问题的其他用户只能使用从<code>str.replace()</code>开始的最后两个步骤</p>
<hr/>
<pre><code>df['col1'] = df['col1'].fillna('').astype(str).str.replace(r'[^A-Za-z ]', '', regex=True).replace('', np.nan, regex=False)
</code></pre>
<p>结果:</p>
<pre><code>print(df)
col1
0 ABC ad
1 YQW
2 AQ GH
3 NaN
4 NaN
5 NaN
</code></pre>
<hr/>
<p>注意,我们不能在这里使用<code>.extract()</code>,而必须使用<code>.replace()</code>来去除不需要的字符。像'ab c1d2@ef4'这样的字符串怎么样?使用什么正则表达式模式只提取数字和特殊字符后面的字母和空格?别忘了,我们必须考虑一般情况,而不仅仅是这里的样本数据。我们能在这里引用所有可能的正则表达式模式来处理无限多的alpha、空格、数字和特殊字符模式的组合吗</p>