數(shù)據(jù)分析(2)--Pandas入門

一、Pandas概述
Pandas 是基于 NumPy 的一個開源 Python 庫辅鲸,它被廣泛用于快速分析數(shù)據(jù),以及數(shù)據(jù)清洗和準備等工作;主要有兩個主要數(shù)據(jù)結(jié)構(gòu)Series(1維)和DataFrame(2維)處理金融妖泄,統(tǒng)計,社會科學和許多工程領(lǐng)域中的絕大多數(shù)典型用例艘策,在Anaconda安裝conda install pandas蹈胡, 或者用自帶的包管理工具 pip 來安裝pip install pandas

二朋蔫、Pandas數(shù)據(jù)結(jié)構(gòu)(series和DataFrame)

  • 數(shù)據(jù)結(jié)構(gòu)的創(chuàng)建

Series

首先導(dǎo)入兩個包:
import numpy as np
import pandas as pd
實例:

data = [1,2,3,4,5]
index = [1,2,3,4罚渐,5]
my_series = pd.Series(data)#不設(shè)置index
my_series1  = pd.Series(data, index)#設(shè)置index
print(my_series, 1)
print(my_series1, 2)

結(jié)果:

運行結(jié)果

總結(jié):
上面的 data參數(shù)可以是任意數(shù)據(jù)對象,比如字典驯妄、列表甚至是 NumPy 數(shù)組荷并,而index 參數(shù)則是對 data 的索引值,類似字典的 key青扔; index 參數(shù)是可省略的源织,你可以選擇不輸入這個參數(shù)。如果不帶 index 參數(shù)微猖,Pandas 會自動用默認 index 進行索引雀鹃,類似數(shù)組,索引值是 [0, ..., len(data) - 1]

  • 用Numpy數(shù)組對象和Python字典創(chuàng)建Series
    實例:
my_data = [11,12,13,14,15]
my_dict = {'a':11, 'b':12, 'c':13, 'd':14, 'e':15}
np_arry = np.array(my_data) 
print(my_data,'numpy的數(shù)組')

my_series = pd.Series(my_data)#用numpy數(shù)組創(chuàng)建Series
my_series1  = pd.Series(my_dict)#用字典創(chuàng)建Series
my_series2 = pd.Series(np.arange(5))
print(my_series, 1)
print(my_series1, 2)
print(my_series2,3)

結(jié)果:

運行結(jié)果

總結(jié)
如果你從一個 Python 字典對象創(chuàng)建 Series励两,Pandas 會自動把字典的鍵值設(shè)置成 Series 的 index,并將對應(yīng)的 values 放在和索引對應(yīng)的 data 里囊颅。和 NumPy 數(shù)組不同当悔,Pandas 的 Series 能存放各種不同類型的對象。

  • Series 里獲取數(shù)據(jù) 訪問 Series 里的數(shù)據(jù)的方式踢代,和 Python 字典基本一樣:
    實例:
my_series1  = pd.Series([1,2,3,4,5],index=['a', 'b', 'c', 'd', 'e'])
print(my_series1)
my_series1['b']

結(jié)果:

運行結(jié)果

  • Series的一些方法和函數(shù):
    my_series.values, my_series.index, isnull()
    實例:
my_series1  = pd.Series([1,2,3,4,5],index=['a', 'b', 'c', 'd', 'e'])

print(my_series1.values,1)
print(my_series1.index,2)
print(my_series1.to_dict,3)

結(jié)果:

運行結(jié)果

  • 對 Series 進行算術(shù)運算操作
    對 Series 的算術(shù)運算都是基于 index 進行的盲憎。我們可以用加減乘除(+ - * /)這樣的運算符對兩個 Series 進行運算,Pandas 將會根據(jù)索引 index胳挎,對響應(yīng)的數(shù)據(jù)進行計算饼疙,結(jié)果將會以浮點數(shù)的形式存儲,以避免丟失精度慕爬。

實例:

data = [1,2,3,4,5]
data2 =[7,8,9,10,12]
index = [1,2,3,4,5]
my_series = pd.Series(data)
my_series1  = pd.Series(data2, index)
print(my_series, 1)
print(my_series1, 2)
my_series1 - my_series#兩個做差

結(jié)果:

運行結(jié)果

DataFrames

Pandas 的 DataFrame(數(shù)據(jù)表)是一種 2 維數(shù)據(jù)結(jié)構(gòu)窑眯,數(shù)據(jù)以表格的形式存儲,分成若干行和列医窿。通過 DataFrame磅甩,你能很方便地處理數(shù)據(jù)。常見的操作比如選取姥卢、替換行或列的數(shù)據(jù)卷要,還能重組數(shù)據(jù)表渣聚、修改索引、多重篩選等
構(gòu)建一個 DataFrame 對象的基本語法如下:

  • Series 來構(gòu)建一個DataFrame:
    實例:
dct = {'Campus':pd.Series(['北京','深圳','上海','廣州'], index=['a','b','c','d']),'Num':pd.Series([5000,4000,3000,2000],index=['a','b','c','d']),'Avg':pd.Series(['10K','9.8K','9K','8K'],index=['a','b','c','d'])}
df = pd.DataFrame(dct)
print(df)
#或者
df1 = pd.DataFrame(dct, columns=['Campus','Avg'])
print(df1)

結(jié)果:

運行結(jié)果

  • 用一個字典來創(chuàng)建 DataFrame:
dct = {'Campus':['北京','深圳','上海','廣州'],'Num':[5000,4000,3000,2000],'Avg':['10K','9.8K','9K','8K']}
df = pd.DataFrame(dct)
print(df)
#或者
df1 = pd.DataFrame(dct, columns=['Campus','Avg'])
print(df1)

結(jié)果:

image.png

  • 獲取 DataFrame 中的列
    實例:
df['Campus']#獲取DataFrame中的一列
print(type(df['Campus']))#獲取返回的類型

df[['Campus', 'Avg']]#獲取DataFrame中的多列
print(type(df[['Campus', 'Avg']]))#獲取返回的類型

結(jié)果:

運行結(jié)果

總結(jié)
因為我們只獲取一列僧叉,所以返回的就是一個 Series奕枝。可以用 type() 函數(shù)確認返回值的類型瓶堕,如果獲取多個列隘道,那返回的就是一個 DataFrame 類型。

  • 三捞烟、DataFrame的IO操作

Pandas 常用的IO操作列表:


IO操作表
  • 復(fù)制表格中的數(shù)據(jù)到剪切板和把數(shù)據(jù)放入到粘粘板中薄声,數(shù)據(jù)可以直接粘粘到excel文件中
    df1 = pd.read_clipboard()df1.to_clipboard()
  • 寫入和讀寫csv文件,可以取消index
    df1.to_csv('df1.csv')df1.to_csv('df1.csv', index = False)df2 = pd.read_csv('df1.csv')
  • 轉(zhuǎn)化為json格式和讀取json
    df1.to_json()pd.read_json(df1.to_json())
  • 轉(zhuǎn)換為excel格式和讀取
    df1.to_excel('df1.xlsx')df1.read_excel('df1.xlsx')
  • df1.head()df1.tail()默認返回前后5行

四题画、Series和DataFramede Reindexing
首先導(dǎo)入from pandas import Series, DaraFrame
實例:

#添加index
s1 = Series(['A', 'B', 'C'], index=[1,5,10])
print(s1)
dct = {'Campus':['北京','深圳','上海','廣州'],'Num':[5000,4000,3000,2000],'Avg':['10K','9.8K','9K','8K']}
df = pd.DataFrame(dct,index=['A','B','C','D'])
print(df)

結(jié)果:

運行結(jié)果

  • reindex填充值
    實例:
print(s1.reindex(index=[1,5,10,15,20]))#在reindex的時候添加的新的index對應(yīng)的值并未指定,默認就是NaN
print(df.reindex(index=['A','B','C','D','E'],columns=['Campus','Num','Avg','Year']))
print(s1.reindex(index=[1,5,10,15,20], fill_value=10 ))#為新的index指定固定值10
print(df.reindex(index=['A','B','C','D','E'],columns=['Campus','Num','Avg','Year'],fill_value=10))
#其他填充值的方法:
print(s1.reindex(index=range(15),method='ffill'))

結(jié)果:

運行結(jié)果

  • 切割和刪除(drop)
    當reindex時指定的index少于原有的index的情況:這是一個類似于切割的操作
    實例:
#這是一個類似于切割的操作
print(s1.reindex(index=[1,5]))
print(df.reindex(index=['A','B',],columns=['Num','Avg']))
print('drop刪除')
print(s1.drop(5))
print(df.drop('B'))
print(df.drop('Num',axis=1))

結(jié)果:

運行結(jié)果

總結(jié):
drop()函數(shù)的參數(shù)axis默認等于0默辨,刪除行,當axis=1苍息,刪除列缩幸,當然還有其他的參數(shù)例如how指定刪除的模式,thresh多余大于就會被刪除

五竞思、Mapping與Replace

  • map
    實例:
df1 = DataFrame({"城市":["北京","上海","廣州"], "人口":[1000,2000,1500]},index = ['A','B','C'])
print(df1,'$$$$$$$$$$')
df1['GDP'] = Series([900,1600,3000])# 用Series添加一列
print(df1,'**************')
gdp_map = {"北京":900,"上海":1600,"廣州":3000}#使用map添加一列
df1['GDP'] = df1['城市'].map(gdp_map)
print(df1,'&&&&&&&&&&&&&&&&')

結(jié)果:

運行結(jié)果

map的優(yōu)勢在與不需要關(guān)心index的順序

replace
實例:

s1 = Series(np.arange(5))
print(s1)
print(s1.replace(1,np.nan))#將一個值替換成NaN
print(s1.replace([2,3,4],[20,30,40]))#替換多個值

結(jié)果:

運行結(jié)果

repalce的優(yōu)勢在于不管替換一個值還是多個值都很方便

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末表谊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子盖喷,更是在濱河造成了極大的恐慌爆办,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件课梳,死亡現(xiàn)場離奇詭異距辆,居然都是意外死亡,警方通過查閱死者的電腦和手機暮刃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門跨算,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人椭懊,你說我怎么就攤上這事诸蚕。” “怎么了氧猬?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵背犯,是天一觀的道長。 經(jīng)常有香客問我狂窑,道長媳板,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任泉哈,我火速辦了婚禮蛉幸,結(jié)果婚禮上破讨,老公的妹妹穿的比我還像新娘。我一直安慰自己奕纫,他們只是感情好提陶,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著匹层,像睡著了一般隙笆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上升筏,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天撑柔,我揣著相機與錄音,去河邊找鬼您访。 笑死铅忿,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的灵汪。 我是一名探鬼主播檀训,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼享言!你這毒婦竟也來了峻凫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤览露,失蹤者是張志新(化名)和其女友劉穎荧琼,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體差牛,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡铭腕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了多糠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡浩考,死狀恐怖夹孔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情析孽,我是刑警寧澤搭伤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站袜瞬,受9級特大地震影響怜俐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜邓尤,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一拍鲤、第九天 我趴在偏房一處隱蔽的房頂上張望贴谎。 院中可真熱鬧,春花似錦季稳、人聲如沸擅这。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仲翎。三九已至,卻和暖如春铛漓,著一層夾襖步出監(jiān)牢的瞬間溯香,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工浓恶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留玫坛,地道東北人。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓问顷,卻偏偏與公主長得像昂秃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子杜窄,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容