科学数据库(Pandas)——第三节 字符串离散化案例

问题:

对于这一组电影数据,如果我们希望统计电影分类(genre)的情况,应该如何处理数据?

思路:

重新构造一个全为0的数组,列名为分类,如果某一条数据中分类出现过,就让0变为1

#coding=utf-8
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt

file_path="MDB-Movie-Data.csv"
df=pd.read_csv(file_path)

#统计分类的列表
temp_genre_list=df["Genre"].str.split(",").tolist()
temp_list = list(set([i for j in temp_genre_list for i in j]))  #set去除重复值,将所有的分类都存放入列表中

#构造全为0的数组
zeros_df=pd.DataFrame(np.zeros((df.shape[0],len(temp_list))),columns=temp_list)


#给每个电影出现的分类位置赋值1
for i in range(df.shape[0]):#将df数组的行数设置为遍历的次数
    genres=df["Genre"][i]  #genres是Series类型
    zeros_df.loc[i,genres.split(",")]=1   #df.loc通过标签索引行数据,并将索引到的地方赋值为1
print(zeros_df)

#统计每个分类的电影的数量和
genre_count=zeros_df.sum(axis=0)  #按行相加求和
#排序
genre_count=genre_count.sort_values()
print(genre_count)

#设置横坐标为genre分类
_x=genre_count.index

#设置纵坐标为统计到的各个分类的电影数量
_y=genre_count.values

#画图
plt.figure(figsize=(20,8),dpi=80)
plt.bar(range(len(_x)),_y,width=0.4,color="orange")
plt.xticks(range(len(_x)),_x)  #设置x轴的刻度
#展示图形
plt.show()

结果输出:

1.以genre分类作为列标签的DataFrame数组

2.各个分类的电影统计数量

Musical        5.0
Western        7.0
War           13.0
Music         16.0
Sport         18.0
History       29.0
Animation     49.0
Family        51.0
Biography     81.0
Fantasy      101.0
Mystery      106.0
Horror       119.0
Sci-Fi       120.0
Romance      141.0
Crime        150.0
Thriller     195.0
Adventure    259.0
Comedy       279.0
Action       303.0
Drama        513.0
dtype: float64

3、输出各个分类对应的电影数量的条形图

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值