鉴于此DataFrame,df
:
Player 1 Player 2
0 Thiem D. Almagro N.
1 Almagro N. Ferrer D.
2 Nadal R. Thiem D.
并映射d
:
d = {
'Thiem D.': 'Dominic Thiem',
'Nadal R.': 'Rafael Nadal',
'Ferrer D.': 'David Ferrer',
}
我想重命名播放器名称,同时这样做我想跟踪映射中不存在的元素(保存到文件,或只是打印)。
我可以通过这条线实现的第一部分:
player_columns = ['Player 1', 'Player 2']
df[player_columns] = df[player_columns].applymap(lambda x: d.get(x, x))
结果是:
Player 1 Player 2
0 Dominic Thiem Almagro N.
1 Almagro N. David Ferrer
2 Rafael Nadal Dominic Thiem
Almagro N.
不是映射中的现有条目,因此无法重命名。我想抓住这个名字。
我知道我可以继承UserDict
对象并在那里实现这个行为,但我很好奇是否有其他方法可以做到这一点?
答案 0 :(得分:1)
您可以尝试将操作拆分为多个操作。
首先,您可以进行映射
df.applymap(d.get)
Player 1 Player 2
0 Dominic Thiem None
1 None David Ferrer
2 Rafael Nadal Dominic Thiem
这为您提供了无法映射为None
现在您可以查看None
s
df[df.applymap(d.get).isnull()]
Player 1 Player 2
0 NaN Almagro N.
1 Almagro N. NaN
2 NaN NaN
如果您希望将这些名称列为未映射的名称,您只需执行
即可unmappables = df[df.applymap(d.get).isnull()]
player1s = unmappables['Player 1'].values.tolist()
player2s = unmappables['Player 2'].values.tolist()
pd.Series((player1s + player2s)).dropna().unique()
给出
array(['Almagro N.'], dtype=object)
答案 1 :(得分:1)
您可以按stack
创建Series
,并unique
获取所有boolean indexing
值map
isnull
cookies problem in PHP and AJAX :
boolean mask