????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)容)
- 這里的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畫圖
文件讀取與存儲
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)