Pandas:访问 DataFrame 中字段内的字段

数据挖掘 Python 熊猫
2022-03-13 19:07:44

假设我有这样一个 JSON 文件:

[
  {
    "id": "0",
    "name": "name0", 
    "first_sent": "date0",  
    "analytics": [
        {
            "a": 1,
            ...
        }, 
        {
            "a": 2, 
            ...
        }
    ]
  }
]

我想用 Pandas 解析它。所以我加载它

df = pd.read_json('file.son')

在我尝试访问并计算每个项目的“分析”字段中的字典数量之前,这一切都很好,为此我没有找到比这更好的方法

for i in range(df.shape[0]):
    num = len(df[i:i+1]['analytics'][i])

但这看起来完全不优雅,并且首先忽略了使用 Pandas 的意义。我需要能够访问每个项目的“分析”中的字段。问题是如何使用 Pandas 访问字段中的字段(映射到 Series 对象),而不使用非 Pandas 方法。

DataFrame 的头部如下所示(仅报告了“id”和“analytics”字段):

0    [{u'a': 0.0, u'b...
1    [{u'a': 0.01, u'b...
2    [{u'a': 0.4, u'b...
3    [{u'a': 0.2, u'b...
Name: analytics, dtype: object
0      '0'
1      '1'
2      '2'
3      '3'

第一个数字显然是索引,字符串是'id',很明显'analytics'以Series的形式出现。

1个回答

多索引可能会有所帮助。看到这个

但下面是我想到的直接解决方案。我认为它比您想出的要优雅一些(更少的晦涩数字,更易于解释的自然语言):

import pandas as pd
df = pd.read_json('test_file.json')
df = df.append(df) # just to give us an extra row to loop through below
df.reset_index(inplace=True) # not really important except to distinguish your rows
for _ , row in df.iterrows():
    currNumbDict = len(row['analytics'])
    print(currNumbDict)