5

I have "None" and "nan" strings scattered in my dataframe. Is there a way to replace all of those with empty string "" or nan so they do not show up when I export the dataframe as excel sheet?

Simplified Example:

Note: nan in col4 are not strings

ID  col1   col2   col3   col4
1   Apple  nan    nan    nan
2   None   orange None   nan
3   None   nan    banana nan

The output should be like this after removing all the "None" and "nan" strings when we replaced them by empty strings "":

ID  col1   col2   col3   col4
1   Apple                nan
2          orange        nan
3                 banana nan

Any idea how to solve this problem?

Thanks,

2
  • 1
    Are you looking for fillna? Commented Aug 12, 2016 at 16:51
  • Why are the nan values in col4 retained in the expected output? Commented Aug 12, 2016 at 17:00

4 Answers 4

8

Use pandas' NaN. Those cells will be empty in Excel (you will be able to use 'select empty cells' command for example. You cannot do that with empty strings).

import numpy as np
df.replace(['None', 'nan'], np.nan, inplace=True)

enter image description here

enter image description here

Sign up to request clarification or add additional context in comments.

1 Comment

Replacing with '' consumes a lot of memory so this should be the acceptable solution.
6

Use a list of strings to replace with blanks strings that won't affect actual nan's...

df.replace(['nan', 'None'], '')

Which'll give you a new dataframe of:

ID   col1    col2    col3  col4
1  Apple                   NaN
2         orange           NaN
3                 banana   NaN

Comments

4

You can compare each column to the numpy object dtype (which is basically text columns), and then only do replacements for those columns.

for col in df:
    if df[col] == np.dtype('O'):  # Object
        df.col1.replace(['None', 'NaN', np.nan], "", inplace=True)

Comments

3

All those loop-de-loop solutions...

replacers = [None, np.nan, "None", "NaN", "nan"] # and everything else that needs replacing.
df.loc[:, df.dtypes == 'object'].replace(replacers, '', inplace=True)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.