写在前面:
由昨天的记录我们知道,用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)"]
运行结果: