<p>这里有一种方法可以在不使用任何日期解析模块的情况下完成此操作。在</p>
<p>一个单行线-您可以通过regex和<code>apply</code>列上的<code>apply</code>提取数字,就像<em>分割成多行以提高可读性</em></p>
<pre><code>(df['Duration']
.apply(lambda x: sum([a*int(b)
for a,b in zip([60., 1., 1./60],
re.findall(r'\d+', x))]))
)
</code></pre>
<p>实际上,对于像<code>'4h 26min. 2sec.'</code>这样的字符串,您首先会找到模式<code>re.findall(r'\d+', x)</code>,也就是<code>[4, 26, 2]</code>,现在用minutes<code>[60., 1., 1./60]</code>和<code>sum</code>的值乘以这个模式。在</p>
<p>假设<code>df</code>是这样的</p>
^{pr2}$
<p>然后,可以提取分钟</p>
<pre><code>In [9]: (df['Duration']
...: .apply(lambda x: sum([a*int(b)
...: for a,b in zip([60., 1., 1./60],
...: re.findall(r'\d+', x))]))
...: )
Out[9]:
0 266.033333
1 8.566667
2 12.283333
Name: Duration, dtype: float64
</code></pre>
<hr/>
<p>为了可读性起见,您还可以创建一个自定义函数<code>minutes</code></p>
<pre><code>def minutes(string):
pattern = re.findall(r'\d+', string)
minutes_mul = [a*int(b) for a,b in zip([60., 1., 1./60], pattern)]
return sum(minutes_mul)
</code></pre>
<p>然后涂上</p>
<pre><code>df['Duration'].apply(minutes)
</code></pre>