zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    【React Native】某个页面禁用物理返回键
    【React Native】DeviceEventEmitter监听通知及带参数传值
    转载【React Native代码】手写验证码倒计时组件
    【React Native】 中设置 APP 名称、应用图标、为安卓添加启动图
    【React Native错误集】* What went wrong: Execution failed for task ':app:installDebug'.
    【React Native错误集】Import fails with "Failed to execute 'ImportScripts' on 'WorkerGlobalScope'"
    【React Native错误集】Android error “Could not get BatchedBridge, make sure your bundle is packaged properly” on start of app
    「React Native笔记」在React的 setState 中操作数组和对象的多种方法(合集)
    【React Native】Error: Attribute application@allowBackup value=(false) from AndroidManifest.xml
    坚果云如何使用二次验证码/谷歌身份验证器/两步验证/虚拟MFA?
  • 原文地址:https://www.cnblogs.com/kylinlin/p/5230062.html
Copyright © 2011-2022 走看看