pandas离散字符串

  • 现有数据,需要将genre这列,电影分类数据统计出来,如下:
    在这里插入图片描述
  • 首先导入库,读取数据:
import pandas as pd
import numpy as np

data = pd.read_csv("IMDB-Movie-Data.csv")
data.head()

在这里插入图片描述

  • 需要注意的是一部电影可能会有多个分类,所以我们需要将该列数据进行处理,使用str.split()方法将字符串用逗号分割,取值:
genres_list = data["Genre"].str.split(",").values
genres_list

在这里插入图片描述

  • 使用列表推导式提取每一个列表中的类别,然后使用集合去重,再转换为列表:
new_genres_list = list(set([genre for genres in list(genres_list) for genre in genres]))
new_genres_list

在这里插入图片描述

  • 创建一个列索引为电影分类,行数和data一致,并填充数据为0的DataFrame
genre_df = pd.DataFrame(np.zeros((data.shape[0], len(new_genres_list))), columns=new_genres_list)
genre_df

在这里插入图片描述

  • 遍历genre_df中的每一行,同时取出genres_list中相同索引的列表,这个列表即列索引,取出 genre_df中对应的分类赋值为1
for i in range(data.shape[0]):
    genre_df.loc[i, genres_list[i]] = 1
genre_df

在这里插入图片描述

  • 对数据的每一列进行求和,即得到了所有电影的类别个数
genre_sum = genre_df.sum(axis=0)
genre_sum.sort_values(inplace=True, ascending=False)

在这里插入图片描述

  • 画一个条形图就大功告成了,可以看到分类最多的是drama,最少的是musical
from matplotlib import pyplot as plt
import matplotlib as mpl


mpl.rcParams['font.family'] = 'SimHei' #设置字体为黑体
mpl.rcParams['axes.unicode_minus'] = False #设置在中文字体是能够正常显示负号(“-”)

plt.figure(figsize=(12,8), dpi=100)

y = genre_sum.values
x = range(len(genre_sum))
x_label = genre_sum.index

plt.bar(x, y, color="orange")

# 设置轴刻度
plt.xticks(x, x_label, rotation=45)


plt.title("1000部电影的类型数量", fontsize=20, fontstyle="italic")
# 设置值标签
for x,y in zip(x,y):
    plt.text(x - 0.2, y + 5, int(y), color="grey")

plt.xlabel("类别", fontsize=18)
    
plt.show()

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值