<p>我认为解决方案应该简化-按空格拆分,得到第二个列表并传递给<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.fillna.html" rel="nofollow noreferrer">^{<cd1>}</a>函数:</p>
<pre><code>df['B'] = df['B'].fillna(df['A'].str.split().str[1])
print (df)
A B
0 adam david
1 monica valenti
2 joe doe doe
3 michael mo mo
</code></pre>
<p><strong>细节</strong>:</p>
<pre><code>print (df['A'].str.split().str[1])
0 NaN
1 NaN
2 doe
3 mo
Name: A, dtype: object
</code></pre>
<hr/>
<p>您的解决方案应该更改:</p>
<pre><code>df['B'] = df['A'].str.extract(r'( [a-zA-Z](.*))')[0].fillna(df.B)
print (df)
A B
0 adam david
1 monica valenti
2 joe doe doe
3 michael mo mo
</code></pre>
<p>更好的解决方案是将regex和<code>expand=False</code>更改为<code>Series</code>:</p>
<pre><code>df['B'] = df['A'].str.extract(r'( [a-zA-Z].*)', expand=False).fillna(df.B)
print (df)
A B
0 adam david
1 monica valenti
2 joe doe doe
3 michael mo mo
</code></pre>
<p><strong>细节</strong>:</p>
<pre><code>print (df['A'].str.extract(r'( [a-zA-Z].*)', expand=False))
0 NaN
1 NaN
2 doe
3 mo
Name: A, dtype: object
</code></pre>
<p>编辑:</p>
<p>对于从第一列中提取值,最简单的是使用:</p>
<pre><code>df1 = df['A'].str.split(expand=True)
df['A'] = df1[0]
df['B'] = df['B'].fillna(df1[1])
print (df)
A B
0 adam david
1 monica valenti
2 joe doe
3 michael mo
</code></pre>