pandas–数据分析处理库
#Series(值集合)
#DataFrame(series对象的集合) DataFrame里的结构是series,series里的结构是ndarray,pandas是封装在numpy基础之上的, from pandas import series
#Panel (DataFrame对象集合)
##Series对象可以保存许多数据类型,包括
float–用于表示浮动值
int --表示整数值
bool–表示布尔值
datetime64[ns]–用于表示日期和时间,不带时区
datetime64[ns, tz] --表示日期和时间,带有时区
timedelta[ns]–用于表示日期和时间(秒、分钟等)的差异
category–用于表示分类值
object–用于表示字符串值
FILM–影片名称
RottenTomatoes–烂番茄评论家平均得分
RottenTomatoes_User–烂番茄用户平均得分
RT_norm --烂番茄影评人平均得分(归一化为0 - 5分)
RT_user_norm --烂番茄用户平均得分(归一化为0 - 5分)
Metacritic --Metacritic批评平均得分
#Metacritic_User - Metacritic用户平均得分
-
#数据集是一个关于电影的评分
import pandas as pd
fandango = pd.read_csv(‘fandango_score_comparison.csv’) #用pd.read_csv()读取关于电影评分的数据,并将其赋给一个变量fandango
series_film = fandango[‘FILM’] #对fandango取其中名为“FILM”的一列,赋值给变量series_film
print(series_film[0:5]) #打印series_film数据的前5行
series_rt = fandango[‘RottenTomatoes’] #取这个评分网站的评分
print(series_rt[0:5]) -
Pandas是封装在NumPy之上的,很多的操作都是Numpy操作的组合。
from pandas import Series
film_names = series_film.values
print(type(film_names))
#print(film_names)
rt_scores = series_rt.values
print(rt_scores)
series_custom = Series(rt_scores , index=film_names)
series_custom[[‘Minions (2015)’, ‘Leviathan (2014)’]]
series_custom = Series(rt_scores , index=film_names)
series_custom[[‘Minions (2015)’, ‘Leviathan (2014)’]]
fiveten = series_custom[5:10]
print(fiveten)
-
Series的排序.sort()
original_index = series_custom.index.tolist() #打印series_custom这个Series类型的索引列表
#print(original_index)
sorted_index = sorted(original_index) #对series_custom的索引列表进行排序
sorted_by_index = series_custom.reindex(sorted_index) #为重新排序后的数据置换新的index
print(sorted_by_index) -
按不同方式进行排序
sc2 = series_custom.sort_index() #按照series_custom的索引排序
sc3 = series_custom.sort_values() #按照series_custom的值排序
#print(sc2[0:10])
print(sc3[0:10]) -
(Series对象中的值被视为ndarray,即NumPy中的核心数据类型)
import numpy as np
print(np.add(series_custom, series_custom)) #.add()两个Series相加(维度相同分别相加)
print(np.sin(series_custom)) #对每一个值使用sin()函数
print(np.max(series_custom)) #返回最大值(将返回单个值,而不是一个级数) -
输出serise_custom中评分>50,<75的电影(将为每个影片返回一个具有布尔值的Series对象)
series_custom > 50
series_greater_than_50 = series_custom[series_custom > 50]
criteria_one = series_custom > 50
criteria_two = series_custom < 75
both_criteria = series_custom[criteria_one & criteria_two] #抽选出>50,<75的数据
print(both_criteria) -
具有相同index的两个Series结构之间的运算(数据对齐相同索引)
先生成两个新的Series(与之前的series_custom相同概念),然后两个series具有相同的index,就可以进行运算。这里的两个Series的index都是“FILM”(电影名),而values值是两个不同的评分网站的评分。
rt_critics = Series(fandango[‘RottenTomatoes’].values, index=fandango[‘FILM’]) #生成两个新的Series,index相同,都 是“FILM”, values是两个网站各自的评分
rt_users = Series(fandango[‘RottenTomatoes_User’].values, index=fandango[‘FILM’])
rt_mean = (rt_critics + rt_users)/2 #两个series的index相同,可以对其操作
print(rt_mean) -
对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)
print(fandango_films.index) -
索引的切片可以是[1:5]这种类型,也可以是[“str”:“str”]类型
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)”]
fandango_films.loc[‘Kumiko, The Treasure Hunter (2015)’]
#当选择多个行时,返回一个DataFrame,但是在选择单个行时,将返回一个Series对象
movies = [‘Kumiko, The Treasure Hunter (2015)’, ‘Do You Believe? (2015)’, ‘Ant-Man (2015)’]
fandango_films.loc[movies] -
pandas中的apply()方法允许我们指定Python逻辑,apply()方法要求传递一个向量化的操作,可以应用于每个系列对象。
import numpy as np
types = fandango_films.dtypes #返回的数据类型是series
print(types)
float_columns = types[types.values == ‘float64’].index # 过滤数据类型为浮点数,索引属性只返回列名
float_df = fandango_films[float_columns] #使用括号符号过滤列,使其仅浮动列
print(float_df)
deviations = float_df.apply(lambda x: np.std(x)) #’ x '是一个表示列的series对象
print(deviations)
rt_mt_user = float_df[[‘RT_user_norm’, ‘Metacritic_user_nom’]]
rt_mt_user.apply(lambda x: np.std(x), axis=1)
#至此,pandas结束(ending)