python - 在没有 NAN 的情况下将 pandas DF 转换为 JSON
问题描述
我有一个看起来像这样的 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}]
我可以使用熊猫来做到这一点吗?
解决方案
尝试这个:
[{**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`
推荐阅读
- javascript - Firebase 用户使用电子邮件注册并通过电子邮件向他们发送密码
- python - 有没有一种简单的方法可以将纹理映射到 python 中的不同“UV”系统?
- reactjs - 为什么读取对象的属性会使对象未定义?
- c# - 如何使用 Cefsharp.wpf 共享屏幕?
- r - 在 R 中合并具有许多行名 == NA 的数据帧
- node.js - res.redirect 适用于 Postman,但不适用于 chrome
- python - 计算数据框中的绝对平均值
- c# - c# 即时创建实例的最少代码
- angular - Ionic 5 / Angular 9 - 将组件导入页面时出错
- react-native - React Native 的最佳广告中介(AdMob 除外)