pandas庫入門

Pandas簡易入門(一)

https://www.cnblogs.com/kylinlin/p/5226790.html

目錄:

??? 讀取數(shù)據(jù)

??? 索引

??? 選擇數(shù)據(jù)

??? 簡單運算



聲明,本文引用于:https://www.dataquest.io/mission/8/introduction-to-pandas?(建議閱讀原文)

Pandas使用一個二維的數(shù)據(jù)結(jié)構(gòu)DataFrame來表示表格式的數(shù)據(jù),相比較于Numpy,Pandas可以存儲混合的數(shù)據(jù)結(jié)構(gòu),同時使用NaN來表示缺失的數(shù)據(jù),而不用像Numpy一樣要手工處理缺失的數(shù)據(jù),并且Pandas使用軸標簽來表示行和列


讀取數(shù)據(jù)

Pandas使用函數(shù)read_csv()來讀取csv文件

import pandas

food_info = pandas.read_csv('food_info.csv')print(type(food_info))

# 輸出:<class 'pandas.core.frame.DataFrame'> 可見讀取后變成一個DataFrame變量


該文件的內(nèi)容如下:


使用函數(shù)head( m )來讀取前m條數(shù)據(jù),如果沒有參數(shù)m,默認讀取前五條數(shù)據(jù)

first_rows = food_info.head()

first_rows = food_info.head(3)

由于DataFrame包含了很多的行和列,Pandas使用省略號(...)來代替顯示全部的行和列,可以使用colums屬性來顯示全部的列名

print(food_info.columns)

# 輸出:輸出全部的列名,而不是用省略號代替

Index(['NDB_No','Shrt_Desc','Water_(g)','Energ_Kcal','Protein_(g)','Lipid_Tot_(g)','Ash_(g)','Carbohydrt_(g)','Fiber_TD_(g)','Sugar_Tot_(g)','Calcium_(mg)','Iron_(mg)','Magnesium_(mg)','Phosphorus_(mg)','Potassium_(mg)','Sodium_(mg)','Zinc_(mg)','Copper_(mg)','Manganese_(mg)','Selenium_(mcg)','Vit_C_(mg)','Thiamin_(mg)','Riboflavin_(mg)','Niacin_(mg)','Vit_B6_(mg)','Vit_B12_(mcg)','Vit_A_IU','Vit_A_RAE','Vit_E_(mg)','Vit_D_mcg','Vit_D_IU','Vit_K_(mcg)','FA_Sat_(g)','FA_Mono_(g)','FA_Poly_(g)','Cholestrl_(mg)'], dtype='object')

可以使用tolist()函數(shù)轉(zhuǎn)化為list

food_info.columns.tolist()

與Numpy一樣,用shape屬性來顯示數(shù)據(jù)的格式

dimensions = food_info.shapeprint(dimensions)

輸出:(8618,36) 表示這個表格有8618行和36列的數(shù)據(jù),其中dimensions[0]為8618,dimensions[1]為36


與Numpy一樣,用dtype屬性來顯示數(shù)據(jù)類型,Pandas主要有以下幾種dtype:

object -- 代表了字符串類型

int -- 代表了整型

float -- 代表了浮點數(shù)類型

datetime -- 代表了時間類型

bool -- 代表了布爾類型


當讀取了一個文件之后,Pandas會通過分析值來推測每一列的數(shù)據(jù)類型

print(food_info.dtypes)

輸出:每一列對應(yīng)的數(shù)據(jù)類型

NDB_No??????????? int64

Shrt_Desc?????????? object

Water_(g)?????????? float64

Energ_Kcal????????? int64

Protein_(g)????????? float64

...


索引

讀取了文件后,Pandas會把文件的一行作為列的索引標簽,使用行數(shù)字作為行的索引標簽

注意,行標簽是從數(shù)字0開始的

Pandas使用Series數(shù)據(jù)結(jié)構(gòu)來表示一行或一列的數(shù)據(jù),類似于Numpy使用向量來表示數(shù)據(jù)。Numpy只能使用數(shù)字來索引,而Series可以使用非數(shù)字來索引數(shù)據(jù),當你選擇返回一行數(shù)據(jù)的時候,Series并不僅僅返回該行的數(shù)據(jù),同時還有每一列的標簽的名字。

譬如要返回文件的第一行數(shù)據(jù),Numpy就會返回一個列表(但你可能不知道每一個數(shù)字究竟代表了什么)

而Pandas則會同時把每一列的標簽名返回(此時就很清楚數(shù)據(jù)的意思了)


選擇數(shù)據(jù)

Pandas使用loc[]方法來選擇行的數(shù)據(jù)

# 選擇單行數(shù)據(jù):

food_info.loc[0]? # 選擇行標號為0的數(shù)據(jù),即第一行數(shù)據(jù)food_info.loc[6]# 選擇行標號為6的數(shù)據(jù),即第七行數(shù)據(jù)# 選擇多行數(shù)據(jù):

food_info.loc[3:6]# 使用了切片,注意:由于這里使用loc[]函數(shù),所以返回的是行標號為3,4,5,6的數(shù)據(jù),與python的切片不同的是這里會返回最后的標號代表的數(shù)據(jù),但也可以使用python的切片方法:food_info[3:7]

food_info.loc[[2,5,10]]# 返回行標號為2,5,10三行數(shù)據(jù)練習(xí):返回文件的最后五行

方法一:

length = food_info.shape[0]

last_rows = food_info.loc[length-5:length-1]

方法二:

num_rows = food_info.shape[0]

last_rows = food_info[num_rows-5:num_rows]

Pandas直接把列名稱填充就能返回該列的數(shù)據(jù)

ndb_col = food_info["NDB_No"]# 返回列名稱為NDB_No的那一列的數(shù)據(jù)zinc_copper = food_info[["Zinc_(mg)","Copper_(mg)"]]# 返回兩列數(shù)據(jù)


簡單運算

現(xiàn)在要按照如下公式計算所有食物的健康程度,并按照降序的方式排列結(jié)果:

Score=2×(Protein_(g))?0.75×(Lipid_Tot_(g))

對DataFrame中的某一列數(shù)據(jù)進行算術(shù)運算,其實是對該列中的所有元素進行逐一的運算,譬如:

water_energy = food_info["Water_(g)"] * food_info["Energ_Kcal"]

原理:

由于每一列的數(shù)據(jù)跨度太大,有的數(shù)據(jù)是從0到100000,而有的數(shù)據(jù)是從0到10,所以為了盡量減少數(shù)據(jù)尺度對運算結(jié)果的影響,采取最簡單的方法來規(guī)范化數(shù)據(jù),那就是將每個數(shù)值都除以該列的最大值,從而使所有數(shù)據(jù)都處于0和1之間。其中max()函數(shù)用來獲取該列的最大值.

food_info['Normalized_Protein'] = food_info['Protein_(g)'] / food_info['Protein_(g)'].max()

food_info['Normalized_Fat'] = food_info['Lipid_Tot_(g)'] / food_info['Lipid_Tot_(g)'].max()

food_info['Norm_Nutr_Index'] = food_info["Normalized_Protein"] * 2 - food_info["Normalized_Fat"] * 0.75注意:上面的兩個語句已經(jīng)在原來的DataFrame中添加了三列,列名分別為Normalized_Protein和Normalized_Fat,Norm_Nutr_Index。只需要使用中括號和賦值符就能添加新列,類似于字典

對DataFrame的某一列數(shù)據(jù)排序,只需要使用函數(shù)sort()即可

food_info.sort("Sodium_(mg)")# 函數(shù)參數(shù)為列名,默認是按照升序排序,同時返回一個新的DataFramefood_info.sort("Norm_Nutr_Index", inplace=True, ascending=False )# 通過inplace參數(shù)來控制在原表排序,而不是返回一個新的對象;ascending參數(shù)用來控制是否升序排序

分類:?Pandas,數(shù)據(jù)分析

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容