首页 > 解决方案 > 如何为 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 数据框?

标签: pythonpandasdataframeyamldenormalization

解决方案


您应该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

推荐阅读