0

How to replace a multiple version in easiest way?

Here's my data:

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

I want to make it:

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

What I did is:

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

But the result is:

No  Device
1   Asus
2   NaN
3   Xiaomi
4   NaN
5   NaN
akshat
  • 1,219
  • 1
  • 8
  • 24
Nabih Bawazir
  • 6,381
  • 7
  • 37
  • 70

3 Answers3

6

Why not just go with 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

There's no need for any mappings or dictionary this way.

cs95
  • 379,657
  • 97
  • 704
  • 746
3

What you need is not mapping but replacing i.e

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

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

​
Bharath M Shetty
  • 30,075
  • 6
  • 57
  • 108
2

Add fillna or combine_first if need dictionary and map:

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

Or:

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

Or use only str.capitalize if need only first letter uppercase:

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
jezrael
  • 822,522
  • 95
  • 1,334
  • 1,252