【问题标题】:Why does this not split the genres properly? (Python)为什么这不能正确划分流派? (Python)
【发布时间】:2020-12-26 16:41:14
【问题描述】:

我正在努力为这个data set 寻找收视率最高的类型。我开始拆分流派,因为大多数行中有多种流派。然后我对流派及其分数进行排序,计算每种流派的平均分数。然后我用每种类型和它们的平均分数更新数据框。但是,出于某种原因,列表中有重复的流派,我不确定为什么。

dataGenre = data
df5 = pd.DataFrame(data={"Genre":dataYearScore['Genre'], "Score": dataYearScore['Score']})
df5 = df5.assign(Genre=df5['Genre'].str.split(',')).explode('Genre').reset_index(drop=True)

genre_list5 = []
avg_scores5 = []

for genre in df5["Genre"].unique():
    genre_list5.append(genre)
    avg_scores5.append(df5.loc[df5["Genre"]==genre, "Score"].mean())

plt.bar(genre_list5, avg_scores5, width = 0.8)
plt.xlabel('Genre')
plt.ylabel('Average Score')
plt.xticks(rotation=65)
plt.title('Average Score for Each Genre')
plt.show()


df5 = pd.DataFrame(data={"Genre":genre_list5, "Score": avg_scores5})
df5

我认为问题出在第 3 行或 for 循环中,但我不确定是什么原因造成的。 任何帮助都将不胜感激:)

更新:

数据可以在这里找到https://www.kaggle.com/isaactaylorofficial/imdb-10000-most-voted-feature-films-041118

它是用进口的

data = pd.read_csv('movies.csv')

我真的不需要图表,我只需要数据框有一列包含流派(无重复)及其平均分数。

df5 = pd.DataFrame(data={"Genre":genre_list5, "Score": avg_scores5})
df5

这是使用上面的代码检查的^

【问题讨论】:

  • 请提供样本数据和所需的输出
  • 我更新了帖子。这是否为您提供了足够的信息?
  • 那么你只想要列表中的第一个流派吗?

标签: python pandas dataframe csv matplotlib


【解决方案1】:

因为comma之前或之后可能会有一些空格分隔两种类型,因此您需要使用正则表达式模式\s*,\s*Series.str.split来正确分割Genres

s = data[['Score']].assign(
    Genre=data['Genre'].str.split(r'\s*,\s*')).explode('Genre')
avg = s.groupby('Genre')['Score'].mean()

绘制平均收视率:

avg.plot(kind='bar', width=0.8)
plt.ylabel('Average Rating')
plt.title('Average Score for Each Genre')

结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多