python 3.x - pandas.to_dict returns None mixed with nan -
i've stumbled upon minor problem pandas , it's method to_dict. have table i'm have equal number of identical columns in each row, let's looks that:
+----|----|----+ |col1|col2|col3| +----|----|----+ |val1| |val3| | |val2|val3| |val1|val2| | +----|----|----+ when df.to_dict(orient='records') get:
[{ "col1":"val1" ,"col2":nan ,"col3":"val3" } ,{ "col1":none ,"col2":"val2" ,"col3":"val3" } ,{ "col1":"val1" ,"col2":"val2" ,"col3":nan }] notice nan's in columns , none's in other (always same, there appears no nan , none in same column)
and when json.loads(df.to_json(orient='records')) none , no nan's (which desired output).
like this:
[{ "col1":"val1" ,"col2":none ,"col3":"val3" } ,{ "col1":none ,"col2":"val2" ,"col3":"val3" } ,{ "col1":"val1" ,"col2":"val2" ,"col3":none }] i appreciate explanation why happens , if can controlled in way.
==edit==
according comments better first replace nan's none's, nan's not np.nan:
>>> = df.head().ix[0,60] >>> nan >>> type(a) <class 'numpy.float64'> >>> np.nan false >>> == np.nan false
i think can replace, not possible control in to_dict:
l = [{ "col1":"val1" ,"col2":np.nan ,"col3":"val3" } ,{ "col1":none ,"col2":"val2" ,"col3":"val3" } ,{ "col1":"val1" ,"col2":"val2" ,"col3":np.nan }] df = pd.dataframe(l).replace({np.nan:none}) print (df) col1 col2 col3 0 val1 none val3 1 none val2 val3 2 val1 val2 none print (df.to_dict(orient='records')) [{'col3': 'val3', 'col2': none, 'col1': 'val1'}, {'col3': 'val3', 'col2': 'val2', 'col1': none}, {'col3': none, 'col2': 'val2', 'col1': 'val1'}]
Comments
Post a Comment