1. 程式人生 > >機器學習——Pandas庫

機器學習——Pandas庫

上一篇文章中的numPy庫是一個關於矩陣運算的庫,而這個Pandas庫是一個數據處理的庫。
一般的,我們在拿到一堆資料時,這些資料並不一定是完整的、無錯誤的,所以我們需要對資料進行預處理,讓它能夠更好地滿足建模的需求。其實Pandas在做預處理時,是基於numPy,如果numPy需要3、4行能解決的事,也許Pandas一個函式就能解決。

這裡有一些Pandas庫的基本函式:https://blog.csdn.net/claroja/article/details/65449494

讀檔案
Pandas本身就是用來讀取檔案資料的,那麼現在有一個檔案,我將它讀進來。

import pandas as pd

food_info=pd.read_csv("food_info.csv")  #讀檔案
print(type(food_info))
print("-----------------------")
print(food_info.dtypes)

執行結果:
在這裡插入圖片描述
從上圖我們可以知道,numPy的資料型別是ndarry,而pandas是一個dataframe。並且,在pandas中,一個字元型資料,它會把它表示成“object”型別,object型別相當於string型別,所以不用太過糾結。如下圖:
在這裡插入圖片描述

顯示部分資料
可以使用.head()或.tail()方法讀取n行資料,而且會自動給每行資料進行標號。

food_info=pd.read_csv("food_info.csv")  #讀檔案
print("預設顯示前5行:\n",food_info.head())
print("-----------------------")
print("顯示前3行:\n",food_info.head(3))
print("-----------------------")
print("顯示後3行:\n",food_info.tail(3))

執行結果:
在這裡插入圖片描述

取出所有的列名

food_info=pd.read_csv("food_info.csv")  #讀檔案
print(food_info.columns)

執行結果:
在這裡插入圖片描述

檢視維度

food_info=pd.read_csv("food_info.csv")  #讀檔案
print(food_info.shape)

執行結果:
在這裡插入圖片描述
這說明了當前的樣本有8618行,36列。

索引號取資料
pandas不想numPy中那樣直接food_info[0]就可以取資料,在pandas中需要使用food_info.loc[0]來取資料。“0”表示第一行資料(不含列名)或者是第一條資料,它會顯示列名。

food_info=pd.read_csv("food_info.csv")  #讀檔案
print(food_info.loc[0])   #取資料第1行

執行結果:
在這裡插入圖片描述
我們來看看是不是取得第一條資料。在csv檔案中檢視:
在這裡插入圖片描述
可以看到,確實是取出來第一條資料,每條資料對應的列名也取了出來。

索引號切片取資料

food_info=pd.read_csv("food_info.csv")  #讀檔案
print(food_info.loc[3:4])   #取資料第4-5行,也就是索引號3-4

執行結果:
在這裡插入圖片描述

當然,也可以單獨取某些值

food_info=pd.read_csv("food_info.csv")  #讀檔案
#print(food_info.loc[3:4])   #取資料第4-5行,也就是索引號3-4
print("-----------------------------------")
print(food_info.loc[[2,5,8]])   #取資料第3,6,9行,也就是索引號2,5,8

執行結果:
在這裡插入圖片描述

取某一列的資料
一般情況下,pandas會預設為第一行是列名。所以,我們可以通過輸入列名名稱來獲取該列資料。

food_info=pd.read_csv("food_info.csv")  #讀檔案
name_row=food_info["NDB_No"]    #列的列名
print(name_row)

執行結果:
在這裡插入圖片描述
我們來看看csv檔案:
在這裡插入圖片描述
可以看到,確實已經被讀取出來了…

取某n列的資料
當然,也可以取某n列的資料。
這裡我取前兩列的資料:

food_info=pd.read_csv("food_info.csv")  #讀檔案
data_row=food_info[["NDB_No","Shrt_Desc"]]    #列的列名
print(data_row)

執行結果:
在這裡插入圖片描述

我們來看看csv檔案的前兩列:
在這裡插入圖片描述
可以看到,前兩列資料確實已經被取了出來,並且pandas還給每行資料標了索引號。

特殊資料列的資料
有這麼一個情況,在我的csv檔案中有這些列名:
在這裡插入圖片描述
它們是以"g"或"mg"為單位的列資料。現在我想要取出以“g”為單位的所有資料列,怎麼做呢?

food_info=pd.read_csv("food_info.csv")  #讀檔案
col_names=food_info.columns.tolist()   #取資料的每一列的列名,把它放進List陣列中
print(col_names)
print("-------------------------------")
g_col_names=[]
for i in col_names:
    if i.endswith("(g)"):    #以"(g)"結尾的列名
        g_col_names.append(i) #追加到g_col_names陣列中
print(g_col_names)

print("-------------------------------")
head_data_3=food_info[g_col_names].head(3)
print(head_data_3)    #只打印資料前三行

執行結果:
在這裡插入圖片描述

資料換算
我的csv檔案中有這麼一列(它是以“mg”結尾):
在這裡插入圖片描述
我現在要把它換算成以“g”結尾的。我們知道,1000mg=1g,所以,這相當於該列的每行資料都要除以1000。
程式碼如下:

food_info=pd.read_csv("food_info.csv")  #讀檔案
mg_convertto_g=food_info["Calcium_(mg)"]/1000
print(mg_convertto_g)

執行結果:
在這裡插入圖片描述
對比csv中的資料,該列每行資料都被除以了1000。

n列對應加減乘除運算及增加一列操作
pandas中,可以直接對那兩行資料進行加減乘除,也可以直接增加新的一列資料。當然了,前提是兩列的維度一樣。

food_info=pd.read_csv("food_info.csv")  #讀檔案
add_data=food_info["Ash_(g)"]+food_info["Carbohydrt_(g)"]  #兩列相加
print(add_data.head(3))     #顯示前三行資料
print("----------------------------------------")
print("初始的維度:\n",food_info.shape)
mg_convertto_g=food_info["Calcium_(mg)"]/1000 #把這列所有資料除以1000 
food_info["mg_convertto_g"]=mg_convertto_g   #增加新的一列資料
print("現在的維度:\n",food_info.shape)

執行結果:
在這裡插入圖片描述
看看csv檔案:
在這裡插入圖片描述
這兩列的前三行資料相加確實一樣。而新加了一列之後的維度也有所改變。

某列最大值查詢及歸一化
numPy中我們可以進行最大值最小值查詢,而在pandas中,唐可以進行最大值或最小值查詢。
同時,我們還對該列進行歸一化處理:每行資料/最大資料

food_info=pd.read_csv("food_info.csv")  #讀檔案
Max_data5=food_info["Sugar_Tot_(g)"].head(5).max() #取前5行最大值
print("前5行最大值:\n",Max_data5)
print("-------------------------------------------------")
Max_data_all=food_info["Sugar_Tot_(g)"].max()  #取該列所有資料中的最大值
normalize_data_all=food_info["Sugar_Tot_(g)"]/Max_data_all  #歸一化處理
print(normalize_data_all)

執行結果:
在這裡插入圖片描述
我在這裡取了該列前5行中的最大值,是為了好驗證,檢視csv檔案:
在這裡插入圖片描述
可以看到,前5行最大值確實是0.51…
注意:NaN在pandas中被認為是缺失值或者打印不出來的值。

缺失值查詢與統計
接下來我主要用泰坦尼克號人員獲救預測”的資料集:titanic_train.csv來進行資料處理操作。當然了,這是一個真實的資料集…
(如果該資料集中某一列如果缺失值較多,那麼這一列就不能作為特徵列進行資料分析與處理。)
titanic_train.csv,它的資料在jupyter notebook中顯示是這樣的:
在這裡插入圖片描述
這裡記錄一下pyCharm與jupyter notebook的區別:
對於一個數據集來說,最直觀的是pyCharm輸出列印時會有縮減,對於橫向資料較多的部分,會用省略號來隱藏。而notebook就不同了,它顯示的資料較多,如上圖所示。而pyCharm則不會,同樣的程式碼,在pyCharm中的顯示結果為:
在這裡插入圖片描述
甚至在notebook中有時候不需要寫print(),寫了print()反而會有點問題。所以,為了更好地顯示資料,這一段程式碼,我在jupyter notebook中列印:

import pandas as pd
import numpy as np

titanic_data=pd.read_csv("titanic_train.csv")  #讀檔案

titanic_data.head(10)

顯示結果:
在這裡插入圖片描述
通過上圖可以看到,“Age”那一列有缺失值(當然其餘列也有),這裡用這一列查詢和統計缺失值。所謂的缺失值,在pandas中以NaN表示,但在csv檔案中表示的是空字元。

titanic_data=pd.read_csv("titanic_train.csv")  #讀檔案
#print(titanic_data.head())
age=titanic_data["Age"]
age_null=pd.isnull(age)  #使用pandas中的空判斷函式判斷這一列,如果為空,會返回True
print(age_null)
#統計該列的缺失值個數
count_null=len(age[age_null])  #查詢的True可以作為索引
print("缺失值個數:\n",count_null)

在這裡插入圖片描述
在這裡插入圖片描述

求均值(在缺失值存在的條件下)
接上面,如果缺失值存在,怎麼去求得該列的平均年齡呢?
1、當缺失值存在且不處理的情況下:

titanic_data=pd.read_csv("titanic_train.csv")  #讀檔案
avg=sum(titanic_data["Age"])/len(titanic_data["Age"])
print("平均年齡:\n",avg)

執行結果:
在這裡插入圖片描述
當有缺失值存在時,結果根本沒法計算出來。
2、當缺失值存在且處理的情況下:

titanic_data=pd.read_csv("titanic_train.csv")  #讀檔案
age_null=pd.isnull(titanic_data["Age"]) #使用pandas中的空判斷函式判斷這一列,如果為空,會返回True
good_age=titanic_data["Age"][age_null==False]  #查找出這一列的缺失值為False的資料
avg=sum(good_age)/len(good_age)
print("平均年齡:\n",avg)

執行結果:
在這裡插入圖片描述
3、使用內建函式處理缺失值及求均值:

titanic_data=pd.read_csv("titanic_train.csv")  #讀檔案
good_age=titanic_data["Age"].mean() #均值,會自動忽略缺失值
print("平均年齡:\n",good_age)

執行結果:
在這裡插入圖片描述
不過以上的資料預處理去掉缺失值的方法並不是很好,通常會使用均值、中位數等來替換缺失值。
這裡使用一個叫做fillNa()的函式進行替換:

titanic_data.fillna(good_age,inplace=True)#把NaN用平均值填充
print(titanic_data["Age"].head(6))

初始結果:
在這裡插入圖片描述
執行結果:
在這裡插入圖片描述

求對應艙位的均值
“Pclass”表示船上的艙位,1,2,3分別表示“一等艙”、“二等艙”、“三等艙”,“Fare”表示每個艙位對應的價格。
在這裡插入圖片描述
現在求每個艙位對應的均值:

titanic_data=pd.read_csv("titanic_train.csv")  #讀檔案
Pclass_Tick=titanic_data.pivot_table(index="Pclass",values="Fare",aggfunc=np.mean)
'''
.pivot_table(透視表)方法裡面可以填寫三個值,index表示統計的資料以誰為基準,
values表示關係,相當於x與y之間的關係。aggfunc是一個方法,求它們對應的均值,當然,也可以不寫,預設為求均值
'''
print(Pclass_Tick)

執行結果:
在這裡插入圖片描述
當然,也可以多個數據進行操作。在csv檔案中,“Embarked”表示人員上船的碼頭,“Fare”表示船票價格,“Survived”表示是否是倖存者。

titanic_data=pd.read_csv("titanic_train.csv")  #讀檔案
one_both=titanic_data.pivot_table(index="Embarked",values=["Fare","Survived"],aggfunc=np.sum)
print(one_both)

在這裡插入圖片描述

去掉NaN值
之前我們可以替換NaN的值,現在我們可以去掉NaN的值,為了顯示清楚,這一段程式碼在notebook中執行。

titanic_data=pd.read_csv("titanic_train.csv")  #讀檔案
td=titanic_data.dropna(axis=0,subset=["Age","Survived"])
td.head(8)

初始結果:
在這裡插入圖片描述
上圖中,可以看到索引標號為5的這一行有NaN。
執行結果:
在這裡插入圖片描述
可以看到,索引標號為6的這一行因為有NaN值,所以被去掉了。

重新排序
以某一列進行重新排序:

titanic_data=pd.read_csv("titanic_train.csv")  #讀檔案
new_titanic_date=titanic_data.sort_values("Age",ascending=False) #以年齡進行降序排序
print(new_titanic_date)

執行結果:
在這裡插入圖片描述
可以看到,表格確實根據年齡降序進行了重新排序,但是,索引卻沒有發生變化,我想讓索引也重新標號,以0,1,2,…這樣開始。這裡就要用到reset_index()函數了。

titanic_data=pd.read_csv("titanic_train.csv")  #讀檔案
new_titanic_date=titanic_data.sort_values("Age",ascending=False) #以年齡進行降序排序

reset_index=new_titanic_date.reset_index(drop=True)  #drop=True表示原來的不要了,直接新建一個
print(reset_index.loc[0:9])   #切片取資料也可以

在這裡插入圖片描述
上面兩個圖作比較,只有索引發生了改變。

自定義函式查詢缺失值

titanic_data=pd.read_csv("titanic_train.csv")  #讀檔案
def NaN_search(column):
    null_bool_data=pd.isnull(column)
    NaN_data=column[null_bool_data]
    return len(NaN_data)

count_NaN=titanic_data.apply(NaN_search)  #呼叫該函式,統計NaN個數
print(count_NaN)

執行結果:
在這裡插入圖片描述

Series結構

pandas中讀取的資料結構式DataFrame,也就是一個矩陣,而Series也是一個數據結構,它表示矩陣中的一行或是一列。
現在我有這麼一張資料集:
在這裡插入圖片描述
它是一個國外電影的評分資料,具體什麼意思不用管它,我們也不熟。

Series資料結構
我們現在來看一看Series是不是DataFrame中的一行或一列:

fandango=pd.read_csv("fandango_score_comparison.csv")
film=fandango["FILM"]
print(type(film))

執行結果:
在這裡插入圖片描述
可以看到,我們讀取了檔案裡的一列資料,打印出來的資料結構是Series,所以,Series是DataFrame中的一行或一列。
那麼,現在,我進行如下操作,把“FILM”中的每一個值取出來:

fandango=pd.read_csv("fandango_score_comparison.csv")
film=fandango["FILM"]
print(type(film))
film_names=film.values  #取出film這一列中的每一個值
print(type(film_names))

執行結果:
在這裡插入圖片描述
可以看到,這些值的結構式ndarray,所以,Series包含ndarray,它們之間的關係如下:ndarray∈Series∈DataFrame。也就是說,pandas是封裝在numPy的基礎之上的。

Series索引操作
之前我們用索引的時候,幾乎都是數字0,1,2,3… ,那麼,可不可以用字串當做索引呢?當然可以。

from pandas import Series   #建立Series需要匯入Series
fandango=pd.read_csv("fandango_score_comparison.csv")  #讀檔案
film=fandango["FILM"]
film_names=film.values  #取出film這一列中的每一個值
# print(film_names)
score_Ro=fandango["RottenTomatoes"].values   #取出fandango["RottenTomatoes"]中的每一個值
series_custom=Series(score_Ro,index=film_names)   #用電影名當成一個索引
print(series_custom[["Ant-Man (2015)","Cinderella (2015)"]])  #列印這兩個電影對應的評分
print("---------------------------------")
five_ten=series_custom[5:10]        #也可以不指定電影名,列印索引5——10的資料
print(five_ten)

執行結果:
在這裡插入圖片描述

Series排序操作

from pandas import Series
fandango=pd.read_csv("fandango_score_comparison.csv")  #讀檔案
film=fandango["FILM"]
film_names=film.values  #取出film這一列中的每一個值
score_Ro=fandango["RottenTomatoes"].values   #取出fandango["RottenTomatoes"]中的每一個值
series_custom=Series(score_Ro,index=film_names) #用電影名當成一個索引
list_index=series_custom.index.tolist()   #把電影名當成索引放進陣列
sort_index=sorted(list_index)
reIndex=series_custom.reindex(sort_index)  
print(reIndex)

執行結果:
在這裡插入圖片描述

Series算平均值

from pandas import Series
fandango=pd.read_csv("fandango_score_comparison.csv")  #讀檔案
film=fandango["FILM"]
film_names=film.values  #取出film這一列中的每一個值
score_Ro1=fandango["RottenTomatoes"].values   #取出fandango["RottenTomatoes"]中的每一個值
score_Ro2=fandango["RottenTomatoes_User"].values   #取出fandango["RottenTomatoes_User"]中的每一個值
series_custom1=Series(score_Ro1,index=film_names) #用電影名當成一個索引
series_custom2=Series(score_Ro2,index=film_names) #用電影名當成一個索引
series_avg=(series_custom1+series_custom2)/2   #求兩個媒體對這部電影的評分,取均值
print(series_avg)

執行結果:
在這裡插入圖片描述

**

DataFrame

**
DataFrame當索引取資料
Series可以進行字串當索引,那麼,DataFrame能不能呢?

fandango=pd.read_csv("fandango_score_comparison.csv")  #讀檔案
fandango_index=fandango.set_index("FILM",drop=True)  #設定電影名當成索引,drop=True表示原來的不要了,直接新建一個
cut_data=fandango_index["Avengers: Age of Ultron (2015)":"Hot Tub Time Machine 2 (2015)"]
print(cut_data)

執行結果:
在這裡插入圖片描述
注意:字串要做索引,需要.set_index()操作之後才可以。

這裡放下本章所講的所有原始碼:
(需要哪章將註釋去掉即可)

import pandas as pd
import numpy as np


#--------------------------讀檔案-------------------
# food_info=pd.read_csv("food_info.csv")  #讀檔案
# food_info=pd.read_csv("food_info.csv")  #讀檔案
# print(type(food_info))
# print("-----------------------")
# print(food_info.dtypes)
# print("-----------------------")

#-------------------------顯示部分資料--------------------
# food_info=pd.read_csv("food_info.csv")  #讀檔案
# print("預設顯示前5行:\n",food_info.head())
# print("-----------------------")
# print("顯示前3行:\n",food_info.head(3))
# print("-----------------------")
# print("顯示後3行:\n",food_info.tail(3))
# print(food_info.columns)

#-------------------------檢視維度--------------------
# food_info=pd.read_csv("food_info.csv")  #讀檔案
# print(food_info.shape)

#-------------------------索引號取資料---------------
# food_info=pd.read_csv("food_info.csv")  #讀檔案
# print(food_info.loc[0])   #取資料第1行

#-------------------------索引號切片資料---------------
# food_info=pd.read_csv("food_info.csv")  #讀檔案
# #print(food_info.loc[3:4])   #取資料第4-5行,也就是索引號3-4
# print("-----------------------------------")
# print(food_info.loc[[2,5,8]])   #取資料第3,6,9行,也就是索引號2,5,8

#-------------------------取某一列的資料---------------
# food_info=pd.read_csv("food_info.csv")  #讀檔案
# name_row=food_info["NDB_No"]    #列的列名
# print(name_row)

#-------------------------取某n列的資料----------------
# food_info=pd.read_csv("food_info.csv")  #讀檔案
# data_row=food_info[["NDB_No","Shrt_Desc"]]    #列的列名
# print(data_row)

#-------------------------取特殊資料列的資料----------------
# food_info=pd.read_csv("food_info.csv")  #讀檔案
# col_names=food_info.columns.tolist()   #取資料的每一列的列名,把它放進List陣列中
# print(col_names)
# print("-------------------------------")
# g_col_names=[]
# for i in col_names:
#     if i.endswith("(g)"):    #以"(g)"結尾的列名
#         g_col_names.append(i) #追加到g_col_names陣列中
# print(g_col_names)
#
# print("-------------------------------")
# head_data_3=food_info[g_col_names].head(3)
# print(head_data_3)    #只打印資料前三行

#-------------------------資料換算----------------
# food_info=pd.read_csv("food_info.csv")  #讀檔案
# mg_convertto_g=food_info["Calcium_(mg)"]/1000
# print(mg_convertto_g)

#-------------------------n列對應加減乘除運算及增加一列操作----------------
# food_info=pd.read_csv("food_info.csv")  #讀檔案
# add_data=food_info["Ash_(g)"]+food_info["Carbohydrt_(g)"]  #兩列相加
# print(add_data.head(3))     #顯示前三行資料
# print("----------------------------------------")
# print("初始的維度:\n",food_info.shape)
# mg_convertto_g=food_info["Calcium_(mg)"]/1000 #把這列所有資料除以1000
# food_info["mg_convertto_g"]=mg_convertto_g   #增加新的一列資料
# print("現在的維度:\n",food_info.shape)

#------------------------某列最大值查詢及歸一化-----------------------
# food_info=pd.read_csv("food_info.csv")  #讀檔案
# Max_data5=food_info["Sugar_Tot_(g)"].head(5).max() #取前5行最大值
# print("前5行最大值:\n",Max_data5)
# print("-------------------------------------------------")
# Max_data_all=food_info["Sugar_Tot_(g)"].max()  #取該列所有資料中的最大值
# normalize_data_all=food_info["Sugar_Tot_(g)"]/Max_data_all  #歸一化處理
# print(normalize_data_all)

#------------------------排序操作-----------------------
# food_info=pd.read_csv("food_info.csv")  #讀檔案
# food_info.sort_values("Ash_(g)",inplace=True)   #預設升序排序,inplace表示是否生成一個新的dataframe,這裡True表示不生成
# print("升序:\n",food_info["Ash_(g)"])
# print("-------------------------------")
# food_info.sort_values("Ash_(g)",inplace=True,ascending=False) #降序操作,ascending=False表示降序,ascending=True為預設,表示升序
# print("降序:\n",food_info["Ash_(g)"])

#------------------------缺失值查詢與統計(notebook中執行最好)--------------------
# titanic_data=pd.read_csv("titanic_train.csv")  #讀檔案
# #print(titanic_data.head())
# age=titanic_data["Age"]
# age_null=pd.isnull(age)  #使用pandas中的空判斷函式判斷這一列,如果為空,會返回True
# print(age_null)
# #統計該列的缺失值個數
# count_null=len(age[age_null])  #查詢的True可以作為索引
# print("缺失值個數:\n",count_null)

#------------------------求均值(在缺失值存在的條件下)--------------------
#-------------1、當缺失值存在且不處理的情況下:---------------
# titanic_data=pd.read_csv("titanic_train.csv")  #讀檔案
# avg=sum(titanic_data["Age"])/len(titanic_data["Age"])
# print("平均年齡:\n",avg)
#-------------2、當缺失值存在且處理的情況下:---------------
# titanic_data=pd.read_csv("titanic_train.csv")  #讀檔案
# age_null=pd.isnull(titanic_data["Age"]) #使用pandas中的空判斷函式判斷這一列,如果為空,會返回True
# good_age=titanic_data["Age"][age_null==False]  #查找出這一列的缺失值為False的資料
# avg=sum(good_age)/len(good_age)
# print("平均年齡:\n",avg)
#-------------3、使用內建函式處理缺失值及求均值:---------------
# titanic_data=pd.read_csv("titanic_train.csv")  #讀檔案
# good_age=titanic_data["Age"].mean() #均值,會自動忽略缺失值
# print("平均年齡:\n",good_age)
# titanic_data.fillna(good_age,inplace=True)#把NaN用平均值填充
# print(titanic_data["Age"].head(6))

#-------------------求對應艙位的均值----------------------
# titanic_data=pd.read_csv("titanic_train.csv")  #讀檔案
# Pclass_Tick=titanic_data.pivot_table(index="Pclass",values="Fare",aggfunc=np.mean)
# '''
# .pivot_table(透視表)方法裡面可以填寫三個值,index表示統計的資料以誰為基準,
# values表示關係,相當於x與y之間的關係。aggfunc是一個方法,求它們對應的均值,當然,也可以不寫,預設為求均值
# '''
# print(Pclass_Tick)
#
# one_both=titanic_data.pivot_table(index="Embarked",values=["Fare","Survived"],aggfunc=np.sum)
# print(one_both)

#------------------去掉NaN值(notebook中執行最好)--------------------------
# titanic_data=pd.read_csv("titanic_train.csv")  #讀檔案
# td=titanic_data.dropna(axis=0,subset=["Age","Survived"])

#------------------重新排序--------------------------
# titanic_data=pd.read_csv("titanic_train.csv")  #讀檔案
# new_titanic_date=titanic_data.sort_values("Age",ascending=False) #以年齡進行降序排序
# print(new_titanic_date.head(10))
# reset_index=new_titanic_date.reset_index(drop=True)  #drop=True表示原來的不要了,直接新建一個
# print(reset_index.loc[0:9])   #切片取資料也可以

#------------------自定義函式查詢缺失值個數--------------------------
# titanic_data=pd.read_csv("titanic_train.csv")  #讀檔案
# def NaN_search(column):
#     null_bool_data=pd.isnull(column)
#     NaN_data=column[null_bool_data]
#     return len(NaN_data)
#
# count_NaN=titanic_data.apply(NaN_search)  #呼叫該函式,統計NaN個數
# print(count_NaN)




#-------------------Series資料結構------------------------------
# fandango=pd.read_csv("fandango_score_comparison.csv")  #讀檔案
# film=fandango["FILM"]
# print(type(film))
#
# film_names=film.values  #取出film這一列中的每一個值
# print(type(film_names))

#-------------------Series索引操作------------------------------
# from pandas import Series   #建立Series需要匯入Series
# fandango=pd.read_csv("fandango_score_comparison.csv")  #讀檔案
# film=fandango["FILM"]
# film_names=film.values  #取出film這一列中的每一個值
# # print(film_names)
# score_Ro=fandango["RottenTomatoes"].values   #取出fandango["RottenTomatoes"]中的每一個值
# series_custom=Series(score_Ro,index=film_names)   #用電影名當成一個索引
# print(series_custom[["Ant-Man (2015)","Cinderella (2015)"]])  #列印這兩個電影對應的評分
# print("---------------------------------")
# five_ten=series_custom[5:10]        #也可以不指定電影名,列印索引5——10的資料
# print(five_ten)


#-------------------Series排序操作------------------------------
# from pandas import Series
# fandango=pd.read_csv("fandango_score_comparison.csv")  #讀檔案
# film=fandango["FILM"]
# film_names=film.values  #取出film這一列中的每一個值
# score_Ro=fandango["RottenTomatoes"].values   #取出fandango["RottenTomatoes"]中的每一個值
# series_custom=Series(score_Ro,index=film_names) #用電影名當成一個索引
# list_index=series_custom.index.tolist()   #把電影名當成索引放進陣列
# sort_index=sorted(list_index)
# reIndex=series_custom.reindex(sort_index)
# print(reIndex)

#---------------------Series算平均值-------------------------------
# from pandas import Series
# fandango=pd.read_csv("fandango_score_comparison.csv")  #讀檔案
# film=fandango["FILM"]
# film_names=film.values  #取出film這一列中的每一個值
# score_Ro1=fandango["RottenTomatoes"].values   #取出fandango["RottenTomatoes"]中的每一個值
# score_Ro2=fandango["RottenTomatoes_User"].values   #取出fandango["RottenTomatoes_User"]中的每一個值
# series_custom1=Series(score_Ro1,index=film_names) #用電影名當成一個索引
# series_custom2=Series(score_Ro2,index=film_names) #用電影名當成一個索引
# series_avg=(series_custom1+series_custom2)/2   #求兩個媒體對這部電影的評分,取均值
# print(series_avg)


#---------------------DataFrame當索引取資料-------------------------------
# fandango=pd.read_csv("fandango_score_comparison.csv")  #讀檔案
# fandango_index=fandango.set_index("FILM",drop=True)  #設定電影名當成索引,drop=True表示原來的不要了,直接新建一個
# cut_data=fandango_index["Avengers: Age of Ultron (2015)":"Hot Tub Time Machine 2 (2015)"]
# print(cut_data)