回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我需要对具有许多不同迭代的pandas系列应用带条件的文本替换。实现这一目标的最佳方式是什么</p>
<p>我的第一个想法是定义一个函数,在函数中迭代,然后应用它,但是这显然不起作用,因为每行只返回一个值(仅第一次迭代):</p>
<pre><code>def numberreplace(x):
matches = {'FIRST':'1ST',
'SECOND':'2ND',
'THIRD':'3RD',
'FOURTH':'4TH',
'FIFTH':'5TH',
'SIXTH':'6TH',
'SEVENTH':'7TH',
'EIGTH':'8TH',
'NINTH':'9TH',
'TENTH':'10TH'}
for key in matches.keys():
if (' '+key+'' in x) or (x.startswith(key)):
x = x.replace(key, matches[key])
return x
else:
return x
data['STREET REFORMAT'] = data['STREET REFORMAT'].apply(numberreplace)
</code></pre>
<p>我的另一个想法是在apply语句之外定义一个列表,迭代字典键列表,然后使用list元素将函数应用于行,但是,我不确定如何将多参数函数应用于一个系列,以及指定哪个参数是该系列的“row”参数</p>
<pre><code>def numberreplace(row,k):
matches = {'FIRST':'1ST',
'SECOND':'2ND',
'THIRD':'3RD',
'FOURTH':'4TH',
'FIFTH':'5TH',
'SIXTH':'6TH',
'SEVENTH':'7TH',
'EIGTH':'8TH',
'NINTH':'9TH',
'TENTH':'10TH'}
if (' '+k+'' in row) or (row.startswith(k)):
row = row.replace(k, matches[k])
return row
return row
nummatches = ['FIRST','SECOND','THIRD','FOURTH','FIFTH','SIXTH','SEVENTH','EIGHTH','NINTH','TENTH]
for match in nummatches:
data['STREET REFORMAT'] = data['STREET REFORMAT'].apply(numberreplace(match))
</code></pre>
<p>在具有多行和多个替换字符串的数据帧上运行此apply函数最有效的方法是什么</p>