python - pandas json_normalize 只生成一大行
问题描述
我有一个 JSON 文件,想将其解析为 pandas DataFrame。我想有以下结构:
身份证 | 活动 | 网站 | ...
游戏1 | 《额定子弹游戏》| https://lichess.org/spTUcy1Z | ...
游戏2 | 《额定闪电战游戏》| https://lichess.org/kh6FJkyS | ...
但是使用df = pd.json_normalize(all_rows)
df 看起来像这样:
---| Game1.Event | Game1.网站 | ...
0 | 额定子弹游戏 | https://lichess.org/spTUcy1Z | ...
JSON 看起来像这样:
{
"Game1": {
"Event": "Rated Bullet game",
"Site": "https://lichess.org/spTUcy1Z",
"Date": "2020.05.01",
"Round": "-",
"White": "AaravShah25",
"Black": "daksh_badhwar",
"Result": "0-1",
"UTCDate": "2020.05.01",
"UTCTime": "04:55:40",
"WhiteElo": "1360",
"BlackElo": "1342",
"WhiteRatingDiff": "-10",
"BlackRatingDiff": "+6",
"ECO": "C56",
"Opening": "Italian Game: Scotch Gambit, Nakhmanson Gambit",
"TimeControl": "60+0",
"Termination": "Normal",
"moves": "1. e4 { [%clk 0:01:00] } e5 { [%clk 0:01:00] } 2. d4 { [%clk 0:00:59] } Nc6 { [%clk 0:01:00] } 3. Nf3 { [%clk 0:00:58] } exd4 { [%clk 0:00:59] } 4. Bc4 { [%clk 0:00:58] } Nf6 { [%clk 0:00:56] } 5. O-O { [%clk 0:00:58] } Nxe4 { [%clk 0:00:54] } 6. Nc3 { [%clk 0:00:58] } Bc5 { [%clk 0:00:53] } 7. Re1 { [%clk 0:00:58] } O-O { [%clk 0:00:52] } 8. h3 { [%clk 0:00:56] } dxc3 { [%clk 0:00:50] } 0-1"
},
"Game2": {
"Event": "Rated Blitz game",
"Site": "https://lichess.org/kh6FJkyS",
"Date": "2020.05.01",
"Round": "-",
"White": "Quggai",
"Black": "vasiukov",
"Result": "1-0",
"UTCDate": "2020.05.01",
"UTCTime": "07:41:06",
"WhiteElo": "2292",
"BlackElo": "2210",
"WhiteRatingDiff": "+5",
"BlackRatingDiff": "-4",
"ECO": "C56",
"Opening": "Italian Game: Scotch Gambit, Nakhmanson Gambit",
"TimeControl": "180+0",
"Termination": "Normal",
"moves": "1. e4 { [%clk 0:03:00] } e5 { [%clk 0:03:00] } 2. Bc4 { [%clk 0:02:59] } Nf6 { [%clk 0:02:58] } 3. d4 { [%clk 0:02:58] } Nc6 { [%clk 0:02:51] } 4. Nf3 { [%clk 0:02:56] } exd4 { [%clk 0:02:48] } 5. O-O { [%clk 0:02:55] } Nxe4 { [%clk 0:02:46] } 6. Nc3 { [%clk 0:02:54] } dxc3 { [%clk 0:02:43] } 7. Bxf7+ { [%clk 0:02:48] } Kxf7 { [%clk 0:02:41] } 8. Qd5+ { [%clk 0:02:48] } Ke8 { [%clk 0:02:16] } 9. Re1 { [%clk 0:02:47] } Ne7 { [%clk 0:02:13] } 10. Rxe4 { [%clk 0:02:45] } c6 { [%clk 0:02:08] } 11. Qd6 { [%clk 0:02:30] } h6 { [%clk 0:01:32] } 12. Qg6# { [%clk 0:02:18] } 1-0"
},
...
谢谢!
解决方案
这个 JSON 的结构看起来可以使用默认的数据框构造函数轻松转换为数据框:
df = pd.DataFrame(all_rows)
您还可以使用.transform(或仅 .T)函数来更改数据方向:
df = pd.DataFrame(all_rows).T
如果此 JSON 中有很多嵌套对象,您可以使用 json_normalize 从字典值制作数据框,然后设置正确的索引:
df = pd.json_normalize(list(all_rows.values()))
df.index = all_rows.keys()
推荐阅读
- python - TypeError:“模块”对象不可调用python
- spring-boot - 我该如何解决这个错误;java.lang.ClassNotFoundException:org.gradle.api.internal.plugins.DefaultConvention
- r - 观察值在 R 行中一起出现的频率
- wpf - 在 wpf 中绑定单元格模板
- google-chrome-extension - chrome.notifications.clear - Android?
- python-3.x - 由于 pip,使用 compose up 时 docker 出现问题
- javascript - 如何通过滑动范围滑块来改变图像?
- javascript - 尝试通过 Dropbox SDK 访问 Dropbox API 时出现错误 500
- javascript - 仅在满足条件时才返回 Firebase 对象值
- azure - 如何在 Azure 数据工厂中使用文件内容作为正文执行发布请求?