python - 如何为 Pandas Dataframe 非规范化 YAML?
问题描述
我正在尝试将 YAML 文件中的数据获取到 Pandas DataFrame 中。举个例子data.yml
:
---
- doc: "Book1"
reviews:
- reviewer: "Paul"
stars: "5"
- reviewer: "Sam"
stars: "2"
- doc: "Book2"
reviews:
- reviewer: "John"
stars: "4"
- reviewer: "Sam"
stars: "3"
- reviewer: "Pete"
stars: "2"
...
所需的 DataFrame 如下所示:
doc reviews.reviewer reviews.stars
0 Book1 Paul 5
1 Book1 Sam 2
2 Book2 John 4
3 Book2 Sam 3
4 Book2 Pete 2
我尝试以不同的方式(例如with open('data.yml') as f: data = pd.DataFrame(yaml.load(f))
)将 YAML 数据提供给 Pandas,但单元格始终包含嵌套的字典。此解决方案适用于一般 JSON 数据,但它的代码量相当大,似乎可能存在更简单的 YAML 解决方案。
是否有一种内置或 Pythonic 的方式来非规范化 YAML 以通过这种方式转换为 Pandas 数据框?
解决方案
您应该json_normalize
在 YAML 加载后使用扁平化字典:
pd.io.json.json_normalize(yaml.load(f), 'reviews', 'doc')
reviewer stars doc
0 Paul 5 Book1
1 Sam 2 Book1
2 John 4 Book2
3 Sam 3 Book2
4 Pete 2 Book2
推荐阅读
- javascript - 如何返回两个ajax响应
- r - 在闪亮仪表板中每行放置一个框
- python - 位置为 0 的 create_category_channel() 在底部创建通道
- javascript - 通过 JavaScript 打开 CHM 帮助文件到特定页面
- powershell - 在执行 AD 操作时嵌套 IF
- javascript - 使用 rxjs 以角度发送多个帖子请求
- excel - 减少 excel 中的嵌套 IF 和 sumif
- javascript - 在 Firefox 与 Chrome 上解析 JSON(错误:JSON.parse:JSON 数据的第 1 行第 1 列的数据意外结束)
- javascript - 如何更改反应选择标签边框半径
- visual-c++ - 如何获取 COM 实例的另一个接口?