仅当值为大写时,才将大写字母映射到多列



我有一个数据帧,每个列有多个空值和不同的数据类型。例如,我有下面的数据帧,我想选择列";名称"国家;以及";作业";并且只有当值为all CAPSLOCK时才将capwords应用于所有这一列(可以在之前将所有内容转换为str,这不是问题(。所以这个数据帧:

ID  Name    Country Job
1   PAULO   BRAZil  JOHN'S DRIVER
2   Joao    $   -
3   Maria   np.nan  DriveR
3   MARIA   Portugal    DRIVER
4   PEdro   ARGENTINA   DRIVER

将返回此输出:

ID  Name    Country Job
1   Paulo   BRAZil  John's Driver
2   Joao    $   -
3   Maria   np.nan  DriveR
3   Maria   Portugal    Driver
4   PEdro   Argentina   Driver

最好的方法是什么?

让我们为每个值尝试applymap

import string
cols = ['Name', 'Country', 'Job']
df[cols] = df[cols].applymap(lambda val: string.capwords(val) if val.isupper() else val)
print(df)
ID   Name    Country            Job
0   1  Paulo     BRAZil  John's Driver
1   2   Joao          $              -
2   3  Maria     np.nan         DriveR
3   3  Maria   Portugal         Driver
4   4  PEdro  Argentina         Driver
5   5  PEdro  Argentina         Driver

最新更新