<p>我认为<code>regex</code>这里没有必要,使用:</p>
<pre><code>import ast
print (df)
col
0 {"FontStyle"=>"Gill Sans Standard", "FontSize"...
1 {"Font Style"=>"Gill Sans Standard","Font Size...
2 {"Font Style":"Script","Font Size":"Medium (3m...
3 {"Font Style"=>"Gill Sans Standard","Font Size...
4 {"Font Style":"Gill Sans Standard","Font Size"...
5 NaN
</code></pre>
<hr/>
<pre><code>d = {'=>':':', 'FontSize':'Font Size','FontStyle':'Font Style'}
regex = '|'.join(r"{}".format(x) for x in d.keys())
df1 = (df['col'].dropna()
.str.replace(regex, lambda x: d[x.group()], regex=True)
.apply(ast.literal_eval))
df2 = pd.DataFrame(df1.values.tolist())[['Font Size','Font Style']].dropna(how='all')
print (df2)
Font Size Font Style
0 Medium (3mm) Gill Sans Standard
1 Medium (3mm) Gill Sans Standard
2 Medium (3mm) Script
3 Medium (3mm) Gill Sans Standard
4 Medium (3mm) Gill Sans Standard
</code></pre>
<p>解释:</p>
<ol>
<li>首先通过<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dropna.html" rel="nofollow noreferrer">^{<cd2>}</a>删除缺少的行</li>
<li>然后对字典中的值使用<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.replace.html" rel="nofollow noreferrer">^{<cd3>}</a></li>
<li>通过<code>ast.literal_eval</code>将值转换为字典</li>
<li>创建新数据帧</li>
<li>如果需要,只按列表过滤列,只移动<code>NaN</code>的行</li>
</ol>