<p><code>apply</code>方法为序列的每一行调用lambda函数一次,
<code>df['Original Column']</code>。为每行调用一次Python函数是一个方法
对于慢度(如果序列有许多行)。一般来说,要最大限度地提高性能
使用Pandas时,只有在没有其他选项的情况下才使用<code>apply</code>方法。你知道吗</p>
<p>在这里使用<code>zip</code>会增加效率。<code>zip</code>返回Python列表
元组数。Python列表和元组比Pandas系列需要更多的空间
当序列中的值是本机NumPy数据类型时。字符串可以是
由本机NumPy数据类型表示,因此将数据保留在一个系列中更为重要
节省空间。所以<code>zip</code>,像<code>apply</code>,如果可能的话,这里应该避免。你知道吗</p>
<p>在本例中,您可以代替Panda的<a href="http://pandas.pydata.org/pandas-docs/stable/text.html#extracting-substrings" rel="nofollow">vectorized string method, ^{<cd8>}</a>:</p>
<pre><code>df = pd.DataFrame({'Original':['abc-def']*3+['foo']})
# Original
# 0 abc-def
# 1 abc-def
# 2 abc-def
# 3 foo
df[['New1', 'New2']] = df['Original'].str.extract(r'([^-]*)-?(.*)')
print(df)
</code></pre>
<p>收益率</p>
<pre><code> Original New1 New2
0 abc-def abc def
1 abc-def abc def
2 abc-def abc def
3 foo foo
</code></pre>
<p><code>extract</code>的参数是regex模式。
<code>r'([^-]*)-?(.*)'</code>具有以下含义:</p>
<pre><code>([^-]*) match 0-or-more characters other than a literal hyphen
-? match 0-or-1 literal question mark
(.*) match 0-or-more of any character
</code></pre>
<p>用括号括起来的模式定义组,然后由
<code>extract</code>方法。你知道吗</p>