python - 计算包含字典列表的 Pandas 列中字典元素的数量

标签 python pandas dataframe

我有一个像这样的数据框

df['likes']
0    {'data': [{'id': '651703178310339', 'name': 'A...
1    {'data': [{'id': '798659570200808', 'name': 'B...
2    {'data': [{'id': '10200132902001105', 'name': ...
3    {'data': [{'id': '10151983313320836', 'name': ...
4                                                  NaN
5    {'data': [{'id': '1551927888235503', 'name': '...
6    {'data': [{'id': '10204089171847031', 'name': ...
7    {'data': [{'id': '399992547089295', 'name': 'В...
8    {'data': [{'id': '10201813292573808', 'name': ...
9                                                  NaN

一些单元格有多个元素'id'

df['likes'][0]
{'data': [{'id': '651703178310339', 'name': 'A'},
  {'id': '10204089171847031', 'name': 'B'}],
 'paging': {'cursors': {'after': 'MTAyMDQwODkxNzE4NDcwMzEZD',
   'before': 'NjUxNzAzMTc4MzEwMzM5'}}}

有些单元格为零。我想获得一个新变量

df['number']
0 2
1 4
2 3
4 0

包含许多元素'id'df['likes'] 是从 dict 中获取的。我尝试计算'id'

df['likes'].apply(lambda x: x.count('id'))
AttributeError: 'dict' object has no attribute 'count'

所以我尝试这样

df['likes'].apply(lambda x: len(x.keys()))
AttributeError: 'float' object has no attribute 'keys'

如何解决?

我被要求发布全套数据,我发布了三行,以免占用太多空间

`df['likes']`
`0 {'data': [{'id': '651703178310339', 'name': 'A'},
  {'id': '10204089171847031', 'name': 'B'}],
 'paging': {'cursors': {'after': 'MTAyMDQwODkxNzE4NDcwMzEZD',
   'before': 'NjUxNzAzMTc4MzEwMzM5'}}}
1 {'data': [{'id': '798659570200808', 'name': 'C'},
  {'id': '574668895969867', 'name': 'D'},
  {'id': '651703178310339', 'name': 'A'},
  {'id': '1365088683555195', 'name': 'G'}],
 'paging': {'cursors': {'after': 'MTM2NTA4ODY4MzU1NTE5NQZDZD',
   'before': 'Nzk4NjU5NTcwMjAwODA4'}}}
2 NaN`

最佳答案

选项 1:

In [120]: df.likes.apply(pd.Series)['data'].apply(lambda x: pd.Series(x).notnull()).sum(1)
Out[120]:
0    2.0
1    4.0
2    0.0
dtype: float64

选项 2:

In [146]: df['count'] = [sum('id' in d for d in x.get('data',[]))
                         if pd.notna(x) else 0
                         for x in df['likes']]

In [147]: df
Out[147]:
                                               likes  count
0  {'data': [{'id': '651703178310339', 'name': 'A...      2
1  {'data': [{'id': '798659570200808', 'name': 'C...      4
2                                                NaN      0

数据集:

In [137]: df.to_dict('r')
Out[137]:
[{'likes': {'data': [{'id': '651703178310339', 'name': 'A'},
    {'id': '10204089171847031', 'name': 'B'}],
   'paging': {'cursors': {'after': 'MTAyMDQwODkxNzE4NDcwMzEZD',
     'before': 'NjUxNzAzMTc4MzEwMzM5'}}}},
 {'likes': {'data': [{'id': '798659570200808', 'name': 'C'},
    {'id': '574668895969867', 'name': 'D'},
    {'id': '651703178310339', 'name': 'A'},
    {'id': '1365088683555195', 'name': 'G'}],
   'paging': {'cursors': {'after': 'MTM2NTA4ODY4MzU1NTE5NQZDZD',
     'before': 'Nzk4NjU5NTcwMjAwODA4'}}}},
 {'likes': nan}]

关于python - 计算包含字典列表的 Pandas 列中字典元素的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49597205/

相关文章:

python - 在 bool numpy 数组中找到 True 前半部分的最佳方法是什么?

python - 从 Flask 中的 S3 返回 PDF

python - 多索引数据帧的嵌套索引

python - python 上的 xlsxwriter,使用条件格式函数和 '3_color_scale'

python - Pandas 两行具有相同的索引,如何更改它们

python - 我可以匿名使用 boto3 吗?

python - 我希望失败的测试没问题

python - pandas datetimeindex Between_time函数(如何获取not_ Between_time)

python - 使用子设置数据框重新编码分类列

python - 如何从 pandas 数据框中进行循环抓取