【问题标题】:Capitalize a string column in pandas [duplicate]大写熊猫中的字符串列[重复]
【发布时间】:2018-11-06 18:06:49
【问题描述】:

如何以最简单的方式替换多个版本?

这是我的数据:

No  Device
1   asus
2   Xiaomi
3   xiaomi
4   Asus
5   Samsung

我想做:

No  Device
1   Asus
2   Xiaomi
3   Xiaomi
4   Asus
5   Samsung

我所做的是:

f = {'xiaomi':'Xiaomi', 'asus':'Asus'}
df['Device'] = df['Device'].map(f)

但结果是:

No  Device
1   Asus
2   NaN
3   Xiaomi
4   NaN
5   NaN

【问题讨论】:

  • 需要大写吗?
  • 如果Asus BEST 则需要Asus best(大写)或Asus Best(标题)?

标签: python string pandas dataframe


【解决方案1】:

为什么不直接选择str.title

df['Device'] = df.Device.str.title()  
df

   No   Device
0   1     Asus
1   2   Xiaomi
2   3   Xiaomi
3   4     Asus
4   5  Samsung

这种方式不需要任何映射或字典。

【讨论】:

  • 确实很聪明哈哈
【解决方案2】:

您需要的不是映射而是replacing

df['Device'] = df['Device'].replace(f)

0       Asus
1     Xiaomi
2     Xiaomi
3       Asus
4    Samsung
Name: Device, dtype: object

​

【讨论】:

  • 是的,要慢,不要用。
  • 但这很容易:)
【解决方案3】:

如果需要,请添加fillnacombine_first dictionarymap

df['Device'] = df['Device'].map(f).fillna(df['Device'])

或者:

df['Device'] = df['Device'].map(f).combine_first(df['Device'])

如果只需要首字母大写,则仅使用str.capitalize

print (df)
   No     Device
0   1  asus best
1   2     Xiaomi
2   3     xiaomi
3   4       Asus
4   5    Samsung

df['Device'] = df['Device'].str.capitalize()
print (df)
   No     Device
0   1  Asus best
1   2     Xiaomi
2   3     Xiaomi
3   4       Asus
4   5    Samsung

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-21
    • 2020-04-08
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 2021-07-11
    相关资源
    最近更新 更多