小丸子踏入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)"]

运行结果:

原文地址:https://www.cnblogs.com/qtww56/p/8732854.html