pandas.DataFrame.to_dict
converts nan
to nan
and null
to None
. As explained in Python comparison ignoring nan this is sometimes suboptimal.
Is there a way to convert all nan
s to None
? (either in pandas
or later on in Python)
E.g.,
>>> df = pd.DataFrame({"a":[1,None],"b":[None,"foo"]})
>>> df
a b
0 1.0 None
1 NaN foo
>>> df.to_dict()
{'a': {0: 1.0, 1: nan}, 'b': {0: None, 1: 'foo'}}
I want
{'a': {0: 1.0, 1: None}, 'b': {0: None, 1: 'foo'}}
instead.
import pandas as pd
df = pd.DataFrame({"a":[1,None],"b":[None,"foo"]})
df.where((pd.notnull(df)), None)
Out[850]:
a b
0 1 None
1 None foo
df.where((pd.notnull(df)), None).to_dict()
Out[851]: {'a': {0: 1.0, 1: None}, 'b': {0: None, 1: 'foo'}}
Initialise as an object DataFrame (at your peril...):
df = pd.DataFrame({"a":[1,None],"b":[None,"foo"]}, dtype=object)
df
a b
0 1 None
1 None foo
In the first column, pandas attempts to infer the dtype, and guesses float. You can prevent that by forcing it to remain object
thereby suppressing any type of conversion at all.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With