How to replace None only with empty string using pandas?
It looks like None
is being promoted to NaN
and so you cannot use replace
like usual, the following works:
In [126]:
mask = df.applymap(lambda x: x is None)
cols = df.columns[(mask).any()]
for col in df[cols]:
df.loc[mask[col], col] = ''
df
Out[126]:
A B C D E
0 A 2014-01-02 02:00:00 A 1
1 B 2014-01-02 03:00:00 B B 2
2 2014-01-02 04:00:00 C C NaN
3 C NaT C 4
So we generate a mask of the None
values using applymap
, we then use this mask to iterate over each column of interest and using the boolean mask set the values.
This is sufficient
df.fillna("",inplace=True)
df
Out[142]:
A B C D E
0 A 2014-01-02 02:00:00 A 1
1 B 2014-01-02 03:00:00 B B 2
2 2014-01-02 04:00:00 C C
3 C C 4
edit 2021-07-26 complete response following @dWitty's comment
If you really want to keep Nat and NaN values on other than text, you just need fill Na for your text column In your exemple this is A, C, D
You just send a dict of replacement value for your columns. value can be differents for each column. For your case you just need construct the dict
# default values to replace NA (None)
# values = {"A": "", "C": "", "D": ""}
values = (dict([[e,""] for e in ['A','C','D']]))
df.fillna(value=values, inplace=True)
df
Out[142]:
A B C D E
0 A 2014-01-02 02:00:00 A 1.0
1 B 2014-01-02 03:00:00 B B 2.0
2 2014-01-02 04:00:00 C C NaN
3 C NaT C 4.0