我有一个看起来像这样的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}]
我可以用熊猫吗?
答案 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}]
如果int
是int
,那么很容易保留[{**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