1. 程式人生 > >【A-003】python資料分析與機器學習實戰 Python科學計算庫 Pandas資料分析處理庫(四)DataFrame資料結構

【A-003】python資料分析與機器學習實戰 Python科學計算庫 Pandas資料分析處理庫(四)DataFrame資料結構

pandas資料結構:DataFrame

引入:
在上一節中已經介紹過了Series物件,Series物件可以理解為由一列索引和一列值,共兩列資料組成的結構。而DataFrame就是由一列索引和多列值組成的結構,其中,在DataFrame中的每一列都是一個Series物件。

行選擇

不管何時,你呼叫了一個方法返回或者列印一個DataFrame時,最左邊的一列必然是索引值,可以通過index屬性來直接訪問DataFrame的索引值。

import pandas as pd
fandango = pd.read_csv('fandango_score_comparison.csv')
# print(fandango.head(2))  輸出前兩行
print(fandango.index) # 列印索引列的值

在Series中,每一個索引都對應著一個值,在DataFrame中,每一個索引則對應著一行的資料,可以通過幾種方法來選擇多資料

# 選擇前五行
fandango[0:5]

# 選擇索引號140及其以後的行
fandango[140:]

# 只選擇索引號為50的那一行
fandango.loc[50]

# 選擇索引號為4590的兩行
fandango.loc[[45,90]]

自定義索引 DataFrame.set_index(“作為索引的那一列標籤”,”inplace= “,”drop= “)

Pandas可以使用某一列來重新自定義DataFrame的索引,通過set_index()方法來實現,該方法主要有兩個引數:

inplace,如果設定為True就不會返回一個新的DataFrame,而是直接修改該DataFrame
drop,如果設定為True,就會移出掉該列的資料

# 把電影名稱作為該DataFrame的索引
fandango = pd.read_csv('fandango_score_comparison.csv')
fandango_films = fandango.set_index('FILM', inplace=False, drop=True)

索引值已經變了,並且該DataFrame中也移除了名為FILM的列(該列變成了索引)使用了自定義的索引後,類似於之前的行選擇一樣進行選擇,只是把整數索引換成了電影名稱而已

Apply()

apply()方法是執行在Series物件中的,而Pandas中任何單獨一列或者單獨一行的資料就是一個Series物件,apply()方法中要傳遞的是一個向量運算方法,如果該方法返回一個單獨的值(譬如將整列(行)的值相加),那麼就會返回一個Series,該Series儲存的是全部列的執行結果

import numpy as np

# 得出每一列的資料型別
types = fandango_films.dtypes

# 選擇具有浮點資料的那些列
float_columns = types[types.values == 'float64'].index
float_df = fandango_films[float_columns]

Apply()函式中 匿名函式的應用
如果要在行上使用apply()方法,只要指定引數axis = 1即可

# 對選擇的列計算總分,在lambda中的x是一個Series,代表了某一列
#np.sum()合併操作,一列計算的結果為一個數值數值,對整個資料dataframe,返回型別為Series
count = float_df.apply(lambda x: np.sum(x))

#如果該方法沒有合併運算結果(譬如將整列(行)的值都分別乘2),一列計算的結果為series的一列值,對整個資料dataframe,返回的型別返回一個DataFrame。
double_df = float_df.apply(lambda x: x*2)

# 計算每部電影的平均分
means = float_df.apply(lambda x: np.mean(x), axis = 1)