0

我已经使用 pandas 将一个 json 数组作为数据框加载到 python 中。我的python代码如下:

import json
import pandas as pd

jsontxt = pd.read_json ('array.json')

df = pd.DataFrame(jsontxt['Total-Hours'])

print(df)

输出如下:

    Total-Hours

0   {'value': 3.0}
1   {'value': 2.0}
2   {'value': 1.0}
3   {'value': 5.0}
4   {'value': 3.0}
5   {'value': 5.0}

我想按总小时数对数据进行分组。如下所示:

val = df.groupby(['Total-Hours']).mean();

我的 JSON 如下:

[
              {
                "key" : "Jacob",
                "doc_count" : 11,
                "Total-Hours" : {
                  "value" : 3.0
                },
                "Calculated-Category" : {
                  "value" : 4.0
                }
              },
              {
                "key" : "AH",
                "doc_count" : 2,
                "Total-Hours" : {
                  "value" : 2.0
                },
                "Calculated-Category" : {
                  "value" : 1.0
                }
              },
              {
                "key" : "FJ",
                "doc_count" : 1,
                "Total-Hours" : {
                  "value" : 1.0
                },
                "Calculated-Category" : {
                  "value" : 4.0
                }
              },
              {
                "key" : "Helen",
                "doc_count" : 1,
                "Total-Hours" : {
                  "value" : 5.0
                },
                "Calculated-Category" : {
                  "value" : 2.0
                }
              },
              {
                "key" : "Test",
                "doc_count" : 1,
                "Total-Hours" : {
                  "value" : 3.0
                },
                "Calculated-Category" : {
                  "value" : 3.0
                }
              },
              {
                "key" : "John",
                "doc_count" : 1,
                "Total-Hours" : {
                  "value" : 5.0
                },
                "Calculated-Category" : {
                  "value" : 3.0
                }
              }
            ]

但是,这要求 Total-Hours 是数字的。实现这一目标的最佳方法是什么?

4

2 回答 2

1

Pandas 目前将行值理解为 dict 类型,因此您可以使用从字典中提取的“值”键更新数组。

下面我使用了一个列表理解,它使用从字典中提取的值更新数据框。我打印更新的数据框,然后最后打印平均值。

另请注意,您不需要创建新的数据框,因为您已经在 jsontxt 中有一个。

import pandas as pd

jsontxt = pd.read_json('array.json')

print(jsontxt)

jsontxt['Total Hours'] = [x['value'] for x in jsontxt['Total Hours']]

print(jsontxt)

print(jsontxt.mean())

这是输出

      Total Hours
0  {'value': 3.0}
1  {'value': 2.0}
2  {'value': 1.0}
3  {'value': 5.0}
4  {'value': 3.0}
5  {'value': 5.0}
   Total Hours
0          3.0
1          2.0
2          1.0
3          5.0
4          3.0
5          5.0
Total Hours    3.166667
dtype: float64

这是我的输入文件的样子:

{
    "Total Hours": [
        {"value": 3.0},
        {"value": 2.0},
        {"value": 1.0},
        {"value": 5.0},
        {"value": 3.0},
        {"value": 5.0}
    ]
}
于 2020-10-28T13:43:18.073 回答
1

您可以将输入视为字典,然后选择总小时数列。应用将从列中创建一个新系列,您可以从中计算平均值

 mean_hours = pd.DataFrame.from_dict(myjson)['Total Hours'].apply(pd.Series).mean()

或从完整输入(额外 - )

 mean_hours = pd.DataFrame.from_dict(myjson)['Total-Hours'].apply(pd.Series).mean()
于 2020-10-28T14:08:38.863 回答