• 小丸子踏入python之路:python_day06(Pandas库中另外一个结构Series)


    写在前面:  

      由昨天的记录我们知道,用pandas.read_csv(“文件名”)的方法读取文件,返回的变量类型为DataFrame结构。也是pandas中最核心的一种类型。那在pandas中还有没有什么其他的类型啊,当然是有的啦,我们把DataFrame类型理解为是由行和列构成的数据,那么将DataFrame进行分解,取其中的一行或者一列,则这其中的一行或一列被称为Series结构。

      即DataFrame结构是由一系列的Series结构构成的

    (将DataFrame理解为读取到的矩阵,那么Series则认为是矩阵的一行或一列)

      Series(collection of values)
      DataFrame(collection of Series objects)

    用代码的形式直接感受一下类型吧:

    #数据集是一个关于电影的评分
    
    import pandas as pd
    
    fandango = pd.read_csv("fandango_score_comparison.csv")  #用pd.read_csv()读取关于电影评分的数据,并将其赋给一个变量fandango
    print("fandango的类型为:" , type(fandango))               #返回变量fandango的类型为DataFrame类型
    
    series_film = fandango["FILM"]                           #对fandango取其中名为“FILM”的一列,赋值给变量series_film
    print("series_film的类型为: ", type(series_film))         #返回变量series_film的类型为Series类型

    运行结果:

    一、关于Series的操作

     1. 直接用切片取Series的特定数据

    series_film = fandango["FILM"]                           #对fandango取其中名为“FILM”的一列,赋值给变量series_film
    print(series_film[0:4])                                  #打印series_film数据的前4行
    
    print("-------------------------------------------")
    series_rt = fandango["RottenTomatoes"]                   #取这个评分网站的评分
    print(series_rt[0:4])

    运行结果:

    2.取series类型的数据的一个value值会是什么类型呢?

      在上边我们知道,取DataFrame类型的数据的一行或者一列会是Series类型,那么如果取一下Series的Values会得到什么类型的数据呢?

    from pandas import Series
    
    series_film = fandango["FILM"]            #取"FILM"这列数据
    film_name = series_film.values         #用.values取得series_film对应的数据(电影名)
    print("film_name = ",film_name)
    print("file_name的类型: ",type(film_name))

    运行结果:

    即:DataFrame里的结构是Series,而Series里的结构又是ndarray

      Pandas是封装在NumPy之上的,很多的操作都是Numpy操作的组合。

       也可以指点values的index来去特定的一个Series的一个值。

    film_name_one = series_film.values[1]
    print(film_name_one)                      #当然也可以打印电影名中指定index的那个值了

    运行结果:

     3.造一个新的Series,并用Stirng类型的index调用数据

    #自己造一个series
    from pandas import Series
    
    series_film = fandango["FILM"]                           #取"FILM"这列数据
    series_rt = fandango["RottenTomatoes"]                   #取这个评分网站的评分
    
    film_name = series_film.values                           #film_name变量是电影名中的数据                         
    rt_scores = series_rt.values                             #rt_scores变量是评分的数据
    
    series_custom = Series(rt_scores, index = film_name)          #将电影名字与RottenTomatoes网站的评分拼在一起造一个Series
    print("重新组合的series_custom的类型 = ",type(series_custom))    #返回series_custom的类型
    print("-------------------------------------------------------------------------------")
    print(series_custom[0:3])                                     #用切片[0:3]返回series_custom的前三行
    
    print("-------------------------------------------------------------------------------")
    print("用series_custom[[0]] = " ,series_custom[[0]])          #用int型的index返回Series类型的第一行
    print("用series_custom[["Avengers: Age of Ultron (2015)"]] = ", series_custom[["Avengers: Age of Ultron (2015)"]])
                                                            #用string类型的index依然能够返回Series类型的第一行

    运行结果:

      从运行结果上看,组合成的series_custom类型还是Serise类型的,并且用index = [0]和用 index = "Avengers: Age of Ultron (2015)"返回的数据相同,说明Series的索引不单单可以是int类型的,还可以是String类型的。

    4.Series的排序.sort()

    4.1

    original_index = series_custom.index.tolist()              #打印series_custom这个Series类型的索引列表
    print(original_index)
    print("---------------------------------------------------------------")
    sorted_index = sorted(original_index)                      #对series_custom的索引列表进行排序
    print(sorted_index) 
    
    sorted_by_index = series_custom.reindex(sorted_index)      #为重新排序后的数据置换新的index
    print(sorted_by_index)

    运行结果:

    原始的index列表

    排序后的index的列表

    重新置换了index后的数据

    4.2 按不同方式进行排序

    sc2 = series_custom.sort_index()          #按照series_custom的索引排序
    print(sc2[0:5])
    print("-------------------------------------------")
    sc3 = series_custom.sort_values()         #按照series_custom的值排序
    print(sc3[0:5])

    运行结果:

     5.对Sercies的add(),sin(), max()操作

    #.add()两个Series相加
    import numpy as np
    print(np.add(series_custom,series_custom))    #维度相同分别相加
    print("----------------------------------------------------")
    #对每一个值使用sin()函数
    print(np.sin(series_custom))
    print("----------------------------------------------------")
    
    #返回最大值
    print("max(series_custom) = ",np.max(series_custom))

    运行结果: 

    add()的结果

    求sin()的结果

    求max()

    6. 输出serise_custom中评分>50,<75的电影

    criteria_one = series_custom > 50           #返回的结果是True或Fales
    criteria_two = series_custom < 75
    #print(criteria_one)
    both_criteria = series_custom[criteria_one & criteria_two]    #抽选出>50,<75的数据
    print(both_criteria)

    运行结果:

    7.具有相同index的两个Series结构之间的运算

       先生成两个新的Series(与之前的series_custom相同概念),然后两个series具有相同的index,就可以进行运算。

      这里的两个Series的index都是“FILM”(电影名),而values值是两个不同的评分网站的评分。

    原始的数据:

    #生成两个新的Serise,index相同,都是“FILM”, values是两个网站各自的评分
    rt_critics = Series(fandango["RottenT,omatoes"].values, index = fandango["FILM"])   
    rt_users = Series(fandango["RottenTomatoes_User"].values, index = fandango["FILM"])
    
    rt_mean = (rt_critics + rt_users)/2    #两个series的index相同,可以对其操作
    print(rt_mean)

    运行结果“:

    8. 对DataFrame类型set_index()(指定索引)

    #将返回一个新的Dataframes,它由指定列中的值进行索引,并将从DataFrame中删除该列,而不删除FILM列
    fandango = pd.read_csv("fandango_score_comparison.csv")           
    print(type(fandango))                         #读文件并赋值给一个变量,打印这个变量类型,为DataFrame类型
    fandango_films = fandango.set_index("FILM",drop = False)      #用.set_index()对DataFrame指定索引“FILM”
    print(fandango_films.index)       

    运行结果:

    9.索引的切片可以是[1:5]这种类型,也可以是["str":"str"]类型

    #索引的切片不单单可以只是数值型的,还可以是string类型的
    fandango_films["Avengers: Age of Ultron (2015)" : "Hot Tub Time Machine 2 (2015)"]
    #fandango_films.loc["Avengers: Age of Ultron (2015)" : "Hot Tub Time Machine 2 (2015)"]

    运行结果:

  • 相关阅读:
    [易学易懂系列|rustlang语言|零基础|快速入门|(18)|use关键词]
    [易学易懂系列|rustlang语言|零基础|快速入门|(17)|装箱crates]
    [易学易懂系列|rustlang语言|零基础|快速入门|(16)|代码组织与模块化]
    区块链行业访谈:《创世访谈录》
    波卡简介
    [易学易懂系列|rustlang语言|零基础|快速入门|(15)|Unit Testing单元测试]
    GIT分布式代码管理系统
    jenkins介绍及部署tomcat环境、部署Maven项目及密码忘记修改
    Docker安装、命令详情、层级架构、docker服务启动失败解决方法
    ELK日志分析系统部署
  • 原文地址:https://www.cnblogs.com/qtww56/p/8732854.html
Copyright © 2020-2023  润新知