Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

NaN column after using map and replace attribute

I have a dictionary:

label_to_text:{0: 'emotion1', 4: 'emotion2', 10: 'emotion3', 12: 'emotion4', 14: 'emotion5', 23: 'emotion6'

and a df:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

text_df:

index    emotion    
  0         0
  1         10
  2         23
  3         12
  4         4
  5         14

What I try:

I used map to add a new column with the dict.values():

text_df['text'] = text_df['emotion'].map(label_to_text)

But I got this:

text_df:

index    emotion     text
  0         0        NaN
  1         10       NaN
  2         23       NaN
  3         12       NaN
  4         4        NaN
  5         14       NaN

What I expected:

text_df:

index    emotion     text
  0         0        emotion1
  1         10       emotion3
  2         23       emotion6
  3         12       emotion4
  4         4        emotion2
  5         14       emotion5

I also tried with replace instead map, but I got this:

index    emotion     text
  0         0        0
  1         10       10
  2         23       23
  3         12       12
  4         4        4
  5         14       14

This is an image of my dictionary:

dict

when I used value = label_to_text.get(3) I got the value, so the key is correct I think.

Edit: Dict information added.
dict print:
dict print

print(text_df[’emotion’].dtype):
text_df[’emotion’].type

>Solution :

You’re getting NaN because the keys of your dictionnary are numeric while the values of your column are strings. So, you need to strip extra whitespaces, cast to (int) and then you can proceed the map :

text_df["text"] = text_df["emotion"].str.strip().astype(int).map(label_to_text)

Output :

print(text_df)

  index emotion      text
0     0       0  emotion1
1     1      10  emotion3
2     2      23  emotion6
3     3      12  emotion4
4     4       4  emotion2
5     5      14  emotion5
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading