在不使用NAN的情况下将熊猫DF转换为JSON

时间:2018-09-25 18:51:04

标签: python json pandas

我有一个看起来像这样的DF:

A    B    C    D    E
1    1    NaN  1    1
NaN  2    3    4    NaN

当我这样做时:

df.to_json(orient='records')

我得到类似

[{"A":1,"B":1,"C":null,"D":1,"E":1},{"A":null,"B":2,"C":3,"D":4,"E":null}]

有没有办法让它忽略任何具有NaN的东西并显示类似以下内容的东西:

[{"A":1,"B":1,"D":1,"E":1},{"B":2,"C":3,"D":4}]

我可以用熊猫吗?

2 个答案:

答案 0 :(得分:2)

尝试一下:

[{**x[i]} for i, x in df.stack().groupby(level=0)]

[{'A': 1.0, 'B': 1.0, 'D': 1.0, 'E': 1.0}, {'B': 2.0, 'C': 3.0, 'D': 4.0}]

如果您想要int

[{**x[i]} for i, x in df.stack().map(int).groupby(level=0)]

[{'A': 1, 'B': 1, 'D': 1, 'E': 1}, {'B': 2, 'C': 3, 'D': 4}]

如果intint,那么很容易保留[{**x[i]} for i, x in df.stack().fillna(0, downcast='infer').groupby(level=0)] [{'A': 1, 'B': 1, 'D': 1, 'E': 1}, {'B': 2, 'C': 3, 'D': 4}]

#    Series with a
#       MultiIndex       Make a Series and drop nulls
#                ↓       ↓                     ↓ Essentially grouping by `index` of `df`
[{**x[i]} for i, x in df.stack().groupby(level=0)]
# ↑   ↑
# ↑   Slice the MultiIndex with name of the group
# Unpack in a dictionary context with double splat `{**mydict} == mydict`

说明

<bean id="HandlerMapping" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>

答案 1 :(得分:0)

以下是在答案为空时删除二分键的先前答案:

{k: v for k, v in metadata.items() if v is not None}

https://stackoverflow.com/a/12118700/8265971

对于熊猫,有一个pandas.DataFrame.dropna函数。如果将这些值分配给列,则可以很好地工作: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html