Pandas

????pandas是一款數(shù)據(jù)處理工具,集成了numpy以及matplotlib,擁有便捷的數(shù)據(jù)處理以及文件讀取能力

核心數(shù)據(jù)結構

1. DataFrame

????numpy僅用作計算,在數(shù)據(jù)表示方面還有所欠缺,很難從數(shù)據(jù)上面看出信息表達的含義垮衷,在這里我們可以將DataFrame看作是有行列索引(標題)的二維數(shù)組

I. DataFrame屬性

pd.DataFrame(array, index,columns)

因為pandas是集成了numpy的,屬性方面用法和功能都類似

  • shape(形狀)
  • values(除去行列索引后的值)
  • T(行列轉置)
  • index(行索引)
  • columns(列索引)

II. 方法

  • head(size)——顯示前size行數(shù)據(jù)乖坠,默認前五行
  • tail(size)——顯示后size行數(shù)據(jù)搀突,默認后五行
 import pandas as pd

#二維數(shù)組定義
 s = [[10,20],[20,30],[30,40]]
#行索引定義
 row = ["test{}".format(i+1) for i in range(3)]
#列索引定義
 col = ["2019-3-{}".format(i+1) for i in range(2)]

data = pd.DataFrame(s, index=row, columns=col)

#輸出
       2019-3-1  2019-3-2
test1        10        20
test2        20        30
test3        30        40

III.設置索引

  • 修改行列索引值

只能整體修改,不能修改單獨某一項

  • 重設索引

reset_index(drop=False)

????重置索引值熊泵,默認drop為False仰迁,不刪除原索引,將其單獨立為一列顽分,在此基礎上將索引重置

  • 設置新的索引 __set_index(keys, drop=True)__

    • keys:列索引名稱或者列索引名稱的列表
    • drop: boolean徐许,默認為True,當做新的索引卒蘸,刪除原來的列
#設置多個索引
df = pd.DataFrame({'month':[1,4,7,10],'year':[2012,2014,2013,2016],'sale':[55,40,84,31]})

df.set_index(['year', 'month'])#設置之后此時返回的index是MultiIndex類型

#輸出
            sale
year month
2012 1        55
2014 4        40
2013 7        84
2016 10       31
>>>

IV. MultiIndex

多級或分層索引對象,可用于存放三維數(shù)據(jù)

  • index屬性
    • names:levels的名稱
    • levels:每個level的元組值
 new_df = df.set_index(['year', 'month'])

new_df.index

new_df.index.names

new_df.index.levels

#輸出
----------------------index--------------------------------------------
MultiIndex(levels=[[2012, 2013, 2014, 2016], [1, 4, 7, 10]],
           labels=[[0, 2, 1, 3], [0, 1, 2, 3]],
           names=['year', 'month'])
----------------------------------------------------------------------------------

----------------------names--------------------------------------------
FrozenList(['year', 'month'])
----------------------------------------------------------------------------------

----------------------levels--------------------------------------------
FrozenList([[2012, 2013, 2014, 2016], [1, 4, 7, 10]])

2. Panel

????存放三維數(shù)據(jù)的面板容器,0.20.0后已經(jīng)棄用雌隅,推薦DataFrame上的MultiIndex方法表示3D數(shù)據(jù)

I.維度

  • items => axis0,每個項目對應內(nèi)部包含的數(shù)據(jù)幀(DataFrame)
  • major_axis => axis 1,它是每個數(shù)據(jù)幀(DataFrame)的索引(行)
  • minor_axis => axis 2, 它是每個數(shù)據(jù)幀(DataFrame)的列

3. Series

可理解為帶索引的一維數(shù)組

I. 屬性

  • index—— 索引項
  • values——索引值缸沃,numpy.ndarray類型

II. 創(chuàng)建Series

  • 通過已有數(shù)據(jù)創(chuàng)建

指定內(nèi)容恰起,默認索引

pd.Series(np.arange(10))

#輸出
0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9


指定索引

pd.Series([6.7,5.6,3,10,2],index=[1,2,3,4,5])

#輸出
1     6.7
2     5.6
3     3.0
4    10.0
5     2.0
dtype: float64

  • 通過字典數(shù)據(jù)創(chuàng)建
pd.Series({'red':1000,'blue':100,'green':500,'yellow':200})

#輸出
red       1000
blue       100
green      500
yellow     200
dtype: int64

III. 索引操作

data = pd.readcsv('filename.csv')

1)直接索引
??????????必須滿足先列后行的規(guī)則,data[col][row]
2)按名字索引
??????????new_data = data.locp[索引名趾牧,索引名]或者new_data = data.locp[索引名][索引名]
3)直接按照數(shù)字索引
??????????data.iloc[number,number]
4)IX組合索引(數(shù)字和名字組合)
??????????data.ix[parm检盼,parm]

  • 在進行索引操作的時候,可以結合前面的index以及columns.get_indexer等方法進行數(shù)據(jù)的獲取

IV. 賦值

按照上述索引方法找到對應數(shù)據(jù)進行賦值即可

V. 排序
1)按照內(nèi)容排序

sort_values(by=,ascendinf=)

  • by:排序關鍵字翘单,可指定單鍵或者多建(以列表形式賦給by即可)
  • ascending:默認升序梯皿,F(xiàn)alse則降序

2)按照索引排序

sort_index()

  • 排序方法對DataFrame以及Series都是適用的,前者需要指定關鍵字县恕,但是Series的一維數(shù)據(jù)只需要直接調用方法執(zhí)行即可。

VI. DataFrame運算
1)算術運算
??????????可以直接用運算符(+剂桥、-忠烛、*等)或者相應的運算方法(add()、sub()等)权逗,作用于數(shù)據(jù)里面的所有元素
2)邏輯運算

  • 邏輯運算符
    > (大于) 美尸、 < (小于) 冤议、 &(并且) 、 |(或者)
    ??????????返回帶索引的布爾值师坎,可以用相應的索引方法篩選數(shù)據(jù)恕酸,例如data[data['parm']>2],在使用&的時候要注意優(yōu)先級,不確定的可以用括號包裹

  • 邏輯運算函數(shù)

    • query(expr) —— 按照expr字符串條件查詢
    • isin(values) —— 判斷是否含有values數(shù)值胯陋,有則返回True蕊温,否則返回False

V. 統(tǒng)計運算
????max、mean遏乔、median义矛、var、std等盟萨,此外可以使用describe()方法統(tǒng)一進行運算凉翻,它會自動統(tǒng)計出一些常用運算結果(包含以上內(nèi)容)

count.png

  • 這里的idxmax就是類似之前numpy里面的argmax方法獲取最大值的位置

VI. 自定義運算

如果需要額外的運算規(guī)則,可以自定義一個函數(shù)進行統(tǒng)計

apply(func, axis=0)

  • func:自定義函數(shù)
  • axis: 默認為0捻激,計算列制轰,axis=1時對行運算
#自定義一個對列數(shù)據(jù)最大值減最小值的運算函數(shù)

data.apply(lambda x : x.max()-x.min(), axis=0)

pandas畫圖

image.png

文件讀取與存儲

image.png

1. csv操作

I. 讀取csv

pandas.read_csv(filepath_or_buffer, sep=',', delimiter=None, names=, usecols=)

  • filepath_or_buffer:文件路徑
  • usecols:指定讀取的列名,列表形式胞谭,用作篩選所需要的數(shù)據(jù)垃杖,也可以通過drop函數(shù)剔除數(shù)據(jù)
  • names:如果遇到直接就是數(shù)據(jù)的文件,需要通過names參數(shù)手動填入索引項

II. 寫入csv

DataFrame.to_csv(path_or_buf=None, sep=',', columns=None, header=True, index=True, index_label=None,mode='w', encoding=None)

  • path_or_buf:文件路徑
  • sep:分隔符
  • columns:要保存的列韭赘,列表形式
  • header:默認為True缩滨,是否寫進列索引值
  • index:是否寫進行索引值
  • mode:w為重寫,a為追加
  • series和dataframe操作基本一致

2. HDF5操作

????HDF5的存儲支持壓縮泉瞻,使用的方式是blosc脉漏,速度最快也是pandas默認支持的,可以提高磁盤利用率袖牙,節(jié)省空間的同時還支持跨平臺侧巨,可以輕松遷移到hadoop上面,HDF5文件的讀取和存儲需要指定一個鍵鞭达,值為要存儲的DataFrame司忱,一個鍵對應一個DataFrame,也可以相當于是存儲三維數(shù)據(jù)了

I.讀取hdf5

????讀取以及寫入需要指定鍵畴蹭,不同的鍵對應不同的DataFrame

pandas.read_hdf(path_or_buf, key=None, **kwargs)

  • key:讀取的鍵
  • mode:打開文件的方式

II. 寫入hdf5文件

可以寫入同一個hdf5文件當中坦仍,以不同的鍵區(qū)分開來

DataFrame.to_hdf(path_or_buf, key, kwargs)

3. JSON文件操作

I. 讀取

pandas.read_json(path_or_buf=None,orient=None,typ='frame',lines=False)

  • orient:指定格式,以下為參數(shù)值
    • split
    • records(最常用的格式叨襟,其他了解即可)
    • index
    • columns
    • values
  • lines:是否逐行讀取繁扎,默認為False
  • typ:指定轉換成的對象類型,series或者dataframe,默認為frame

2. 寫入

pandas.to_json(path_or_buf=None,orient=None,typ='frame',lines=False)

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末梳玫,一起剝皮案震驚了整個濱河市爹梁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌提澎,老刑警劉巖姚垃,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異盼忌,居然都是意外死亡积糯,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門碴犬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來絮宁,“玉大人,你說我怎么就攤上這事服协∩馨海” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵偿荷,是天一觀的道長窘游。 經(jīng)常有香客問我,道長跳纳,這世上最難降的妖魔是什么忍饰? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮寺庄,結果婚禮上艾蓝,老公的妹妹穿的比我還像新娘。我一直安慰自己斗塘,他們只是感情好赢织,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著馍盟,像睡著了一般于置。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贞岭,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天八毯,我揣著相機與錄音,去河邊找鬼瞄桨。 笑死话速,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的芯侥。 我是一名探鬼主播泊交,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了活合?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤物赶,失蹤者是張志新(化名)和其女友劉穎白指,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酵紫,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡告嘲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了奖地。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片橄唬。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖参歹,靈堂內(nèi)的尸體忽然破棺而出仰楚,到底是詐尸還是另有隱情,我是刑警寧澤犬庇,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布僧界,位于F島的核電站,受9級特大地震影響臭挽,放射性物質發(fā)生泄漏捂襟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一欢峰、第九天 我趴在偏房一處隱蔽的房頂上張望葬荷。 院中可真熱鬧,春花似錦纽帖、人聲如沸宠漩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哄孤。三九已至,卻和暖如春吹截,著一層夾襖步出監(jiān)牢的瞬間瘦陈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工波俄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留晨逝,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓懦铺,卻偏偏與公主長得像捉貌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353