将以下JSON文件提供给Pandas(df = pd.read_json(file)
):
[
{
"Name": "foo",
"Details": {
"Vendor": "Microsoft",
"Item": "aaa"
}
},
{
"Name": "bar",
"Details": {
"Vendor": "Microsoft",
"Item": "bbb"
}
},
{
"Name": "baz",
"Details": {
"Vendor": "Microsoft",
"Item": "ccc"
}
},
{
"Name": "baz2",
"Details": {
"Vendor": "Microsoft",
"Item": "ccc"
}
},
{
"Name": "qux",
"Details": {
"Vendor": "IBM",
"Item": "aaa"
}
}
]
我想对JSON文件中的项目执行唯一计数。我想知道唯一供应商的数量,以及唯一供应商-项目组合的数量。使用上述JSON,有2个唯一的供应商(Microsoft和IBM),并且有4个唯一的供应商项目组合(baz和baz2是重复的)。
我相信我的当前尝试失败了,因为我将JSON存储在DataFrame
中。
df = pd.read_json(file)
print(df)
输出:
Name Details
0 foo {'Vendor': 'Microsoft', 'Item': 'aaa'}
1 bar {'Vendor': 'Microsoft', 'Item': 'bbb'}
2 baz {'Vendor': 'Microsoft', 'Item': 'ccc'}
3 baz2 {'Vendor': 'Microsoft', 'Item': 'ccc'}
4 qux {'Vendor': 'IBM', 'Item': 'aaa'}
我还尝试了以下操作:print(df.groupby("Details").Vendor.nunique())
导致错误:
AttributeError: 'DataFrameGroupBy' object has no attribute 'Vendor'
答案 0 :(得分:1)
有人问了一个相关问题here。您正在寻找的是json_normalize。下面的代码几乎没有变化。
from pandas.io.json import json_normalize
a = [
{
"Name": "foo",
"Details": {
"Vendor": "Microsoft",
"Item": "aaa"
}
},
{
"Name": "bar",
"Details": {
"Vendor": "Microsoft",
"Item": "bbb"
}
},
{
"Name": "baz",
"Details": {
"Vendor": "Microsoft",
"Item": "ccc"
}
},
{
"Name": "baz2",
"Details": {
"Vendor": "Microsoft",
"Item": "ccc"
}
},
{
"Name": "qux",
"Details": {
"Vendor": "IBM",
"Item": "aaa"
}
}
]
Loaded = json_normalize(a)
print(Loaded)
答案 1 :(得分:0)
您可以在输入n
之前准备/过滤JSON数据:
pandas
答案 2 :(得分:0)
这是另一种方法。您可以尝试一下。
from pandas.io.json import json_normalize
import pandas as pd
a = pd.read_json("/PathToYourJSON/TempDelete.json")
a['Vendor']=a['Details'].apply(lambda x: x['Vendor'])
a['Item']=a['Details'].apply(lambda x: x['Item'])
a.drop(columns="Details",inplace=True)
print(a)
这给出如下输出。请让我知道这是否是您想要的。