【问题标题】:How could I count all the genres in my DataFrame?我如何计算我的 DataFrame 中的所有类型?
【发布时间】:2021-03-27 04:55:59
【问题描述】:

我有一个名为 df_imdb 的 DataFrame:

每一行都包含有关电影的信息,此 DataFrame 有一个列名“流派”,它显示了该电影的流派,可能有多个流派,例如[{'id': 53, 'name': 'Thriller'}, {'id': 28, 'name': 'Action'}, {'id': 9648, 'name': 'Mystery'}]

我想找出这部电影中使用最多的类型是什么(在这个 DataFrame 中查找前 3 个最常用的类型)

【问题讨论】:

  • 您是否尝试过类似:df['genres'].explode()['name'].value_counts()
  • 我现在试过了,但是没有用!!,给出了这个错误:'Series'对象没有属性'explode',实际上是行的类型,例如type(df_imdb.loc[2,'genres'])str
  • 请不要发布图片。而是将所有内容粘贴为文本。此外,发布具有预期输出的示例输入数据。

标签: python-3.x pandas list dataframe dictionary


【解决方案1】:

数据是字典列表,这里有多个选项:

选项 1:纯 pandas,将与键 name 关联的值转换为 Series 并使用 value_counts

df = pd.DataFrame({'genres':[[{'id': 53, 'name': 'Thriller'}, {'id': 28, 'name': 'Action'}, {'id': 9648, 'name': 'Mystery'}],[{'id': 53, 'name': 'Thriller'}, {'id': 30, 'name': 'Blah'}, {'id': 9648, 'name': 'Mystery'}]]})

df['genres'].apply(lambda x: pd.Series([i['name'] for i in x]))\
.stack().value_counts()

你得到

Thriller    2
Mystery     2
Action      1
Blah        1

选项 2:将值转换为列表并使用 Counter

from collections import Counter
l_genres = df['genres'].apply(lambda x: [i['name'] for i in x]).sum()
Counter(l_genres)

你得到

Counter({'Thriller': 2, 'Action': 1, 'Mystery': 2, 'Blah': 1})

df['genres'].apply(lambda x: pd.Series([i['name'] for i in x])).stack().value_counts()

编辑:数据类型是str而不是list,先用literal_eval

from ast import literal_eval
df['genres'] = df['genres'].apply(literal_eval)

【讨论】:

  • 实际上,行的类型,例如type(df_imdb.loc[2,'genres']) str
  • @MohammadPeighambari,请查看编辑。你需要先使用literal_eval
  • 感谢您的更新,它运行良好。
【解决方案2】:

试试这个:

c = df_imbd['genres'].apply(lambda x: [n['name'] for n in x]).sum()
pd.Series(c).value_counts()

【讨论】:

  • 出现此错误:字符串索引必须是整数
  • 成功了,可以再试试吗? Vaishali 的回答也很相似,你确认了。
  • 是的,亲爱的,如果您添加此部分:from ast import literal_evaldf['genres'] = df['genres'].apply(literal_eval) 您的代码也可以正常工作。更新您的代码,我会确认。
  • 不,这是 Vaishali 的回答。我认为它是list(如您所指定),但事实并非如此,因此您应该以更准确的方式澄清这一点。
  • 对不起,我的错。我应该更新这个问题。但最终,我把两种方式都搞混了。谢谢你们的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-21
  • 2019-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-27
相关资源
最近更新 更多