• Pandas简易入门(三)


    本节主要介绍一下Pandas的数据结构,本文引用的网址:https://www.dataquest.io/mission/146/pandas-internals-series

    本文所使用的数据来自于:https://github.com/fivethirtyeight/data/tree/master/fandango

    该数据主要描述了一些电影的烂番茄评分情况

     

    数据结构

    在Pandas中,主要有三种重要的数据结构:

    • Series(值的集合)
    • DataFrame(Series的集合)
    • Panel(DataFrame的集合)

     

    Pandas的Series是Numpy的数组(array)的升级版,Numpy只能使用整数来所索引,但是Series还可以使用字符串来索引,还能使用混合的数据类型和NaN来表示缺失值,一个Series对象可以包含以下几种数据类型:

    • float -- 表示字符串数值
    • int -- 表示整型数值
    • bool -- 表示布尔值
    • datetime64[ns] -- 表示日期和时间(不带时区)
    • datetime64[ns, tz] -- 表示日期和时间(有时区)
    • timedelta[ns] -- 以不同的格式(分钟,秒等)格式表示时间
    • category -- 表示分类值
    • object -- 表示字符串值

     

    DataFrame使用Series对象来表示每一列的数据,所以当从一个DataFrame中选择某一列的时间,Pandas会返回代表了该列的Series对象,并且从0开始索引该Series的行,当然也可以使用分片来选择多行

    # 分别选择FILM和RottenTomatoes两列,并输出前5行
    
    fandango = pd.read_csv('fandango_score_comparison.csv')
    
    series_film = fandango['FILM']
    
    print(series_film.head(5)) 
    
    series_rt = fandango['RottenTomatoes']
    
    print(series_rt[:5])

    输出:

    Image 235

    原始的数据如下:

    Image 236

     

     

    自定义索引

    上面提取了两个Series,series_film代表了电影名称,series_rt代表了评分,我现在想知道这两部电影(Minions (2015), Leviathan (2014))的评分,最简单的方法就是这样

    print(fandango[fandango['FILM']=='Minions (2015)']['RottenTomatoes'].values[0])
    
    print(fandango[fandango['FILM']=='Leviathan (2014)']['RottenTomatoes'].values[0])
    
    # 这样要对每部电影都写一个语句是非常麻烦的
    
    # 最好的方法就是将series_film和series_rt组合成一个新的Series,用电影名称作为索引,电影评分作为值,这样要查询多部电影时就变得方便
    
    film_names = series_film.values
    
    rt_scores = series_rt.values
    
    series_custom = Series(rt_scores , index=film_names) # 创建一个Series,需要指定data和index参数

    Image 237

     

    #此时要查询多部电影就变得简单
    
    series_custom[['Minions (2015)', 'Leviathan (2014)']]
    
    #对于上面新建的一个Series,现在要对电影的名称进行按字母重新排序,可以使用sort_index()函数,如果要对电影的评分排序则使用sort_values()函数
    
    sc2 = series_custom.sort_index()
    
    sc3 = series_custom.sort_values()

    Image 238

    Image 239

     

    向量化运算

    当你要操作数据集中的某一列的数据时,Series对象可以快速地进行向量化的运算(自动对该列中的每个数据值都进行运算),Pandas的底层使用了Numpy,而Numpy则使用了C语言来循环一整列的值,所以会快得飞起。要是你特意使用一个for来循环一个Series对象,实际上会变得非常慢。

     

    向量化运算的例子

    #对一个Series进行加减乘除运算
    
    series_custom/10
    
    # 这个语句实际上是对series_custom这个Series中的每个值都进行除法运算,注意,是不会对索引进行运算的
    
    # 也可以使用Numpy的函数来进行运算
    
    np.max(series_custom) #求出电影分数的最大值

    还可以进行比较与过滤

    series_custom > 50 # 返回一个包含布尔值的列表,分数大于50则返回True,可以用于过滤数据
    
    series_greater_than_50 = series_custom[series_custom > 50]
    
    # 也可以使用&(and)和 |(or)连接几个判断
    
    series_greater_than_50_&_less_than_80 = 
    
        series_custom[(series_custom > 50)  & (series_custom < 80) ]

    当然,也可以直接对两个Series进行运算

    rt_critics = Series(fandango['RottenTomatoes'].values, index=fandango['FILM']) # 影评人的评分
    
    rt_users = Series(fandango['RottenTomatoes_User'].values, index=fandango['FILM']) #用户评分
    
    rt_mean = (rt_critics + rt_users) / 2 # 平均分

    Image 240

  • 相关阅读:
    Ajax
    事件委托
    事件对象
    js的基础类型与引用类型
    Javascript和HTML dom
    用jQuery写的最简单的表单验证
    初学HTML5的一点理解
    CMake 入门
    centos7上rpm安装wkhtmltopdf
    centos7 下安装思源黑体字体
  • 原文地址:https://www.cnblogs.com/kylinlin/p/5230062.html
Copyright © 2020-2023  润新知