【问题标题】:How do I create a Pandas Dataframe from a list that has all the values I'm seeking to include in the dataframe nested inside a recurring list element?如何从一个列表中创建一个 Pandas 数据框,该列表包含我想要包含在嵌套在循环列表元素中的数据框中的所有值?
【发布时间】:2021-04-09 09:20:24
【问题描述】:

列表如下所示。

[
  {
      "legal": [
          {
              "importance": 3,
              "notes": "",
              "updated": 19976,
              "date": 09/05/2020
          }
      ]
  },

  {
      "legal": [
          {
              "importance": 3,
              "notes": "",
              "updated": 15783,
              "date": 09/05/2020
          }
      ]
}
]

我希望列是“重要性”、“注释”、“更新”和“日期”。我想让索引成为“日期”。我似乎无法找到一种方法来使用它们所在列表的“合法”元素来制作熊猫数据框。我不必将它们包含在数据框中。这就是我接收数据的方式。我想知道制作这个熊猫数据框的正确方法。让它看起来像这样。

| date *index | importance | notes | updated |
|-------------|------------|-------|---------|
| 09/05/2020  |      3     |  NaN  |  19976  |
|             |      3     |  NaN  |  15783  |  

【问题讨论】:

    标签: python pandas dataframe indexing python-3.7


    【解决方案1】:

    您可以尝试以下列表推导来获取每个字典的 legal 键和第一个(唯一)字典,然后将空字符串替换为 NaN:

    df = pd.DataFrame([i['legal'][0] for i in lst]).replace('', np.nan)
    

    然后:

    print(df)
    

    将给予:

             date  importance  notes  updated
    0  09/05/2020           3    NaN    19976
    1  09/05/2020           3    NaN    15783
    

    【讨论】:

      【解决方案2】:

      为此使用pd.json_normalize

      In [33]: pd.json_normalize(data, 'legal').replace({'': np.nan}).set_index('date')
      Out[33]:
                  importance  notes  updated
      date
      09/05/2020           3    NaN    19976
      09/05/2020           3    NaN    15783
      

      【讨论】:

        猜你喜欢
        • 2022-11-18
        • 2023-04-06
        • 1970-01-01
        • 2021-09-23
        • 2018-10-13
        • 2020-05-10
        • 2018-06-23
        • 2018-06-17
        • 1970-01-01
        相关资源
        最近更新 更多