pandas Dataframe 处理

hec6srdp  于 2023-04-28  发布在  其他
关注(0)|答案(2)|浏览(115)

我有几个在dataframe中包含2个dict的列表,如下所示:

new_data[0] 

[{'code': '8', 'name': 'Human '}, {'code': '11', 'name': 'ET '}]

我想统计名字出现的次数

#for i in new_data:

 #   aux_list.append(i[0]["name"])
   # aux_list.append(i[1]["name"])

#pd.DataFrame(aux_list).value_counts()

不幸的是,我的一些名称.值是空的
有没有更好的方法呢?如何删除nan值?

apeeds0o

apeeds0o1#

假设此输入:

new_data = [[{'code': '8', 'name': 'Human'}, {'code': '11', 'name': 'ET'}],
            [{'code': '8', 'name': 'Human'}, {'code': '11'}],
           ]

你不需要pandas,使用一个简单的Counter

from collections import Counter

out = Counter(d['name'] for l in new_data for d in l if 'name' in d)

输出:

Counter({'Human': 2, 'ET': 1})

如果你真的想使用pandas,一个选择是合并itertools.chainpandas.json_normalize来为value_counts创建一个输入Series:

from itertools import chain

out = pd.json_normalize(chain.from_iterable(new_data))['name'].value_counts()

输出:

Human    2
ET       1
Name: name, dtype: int64
ovfsdjhp

ovfsdjhp2#

我知道可能有更好的方法来做到这一点,但这是可行的:

import pandas as pd
new_data = [{'code': '8', 'name': ''}, {'code': '11', 'name': 'Human'}, {'code': '10', 'name': 'Animal'}, {'code': '13'}]
aux_list = []
for i in new_data:
   if "name" in i and i["name"]: aux_list.append(i["name"])
cont = pd.DataFrame(aux_list).value_counts()
print(cont)

输出:

Animal    1
Human     1
dtype: int64

相关问题