數據分析三大神器之二:Pandas
簡介:
pandas 是基於NumPy 的一種工具,該工具是爲了解決數據分析任務而創建的。Pandas 納入了大量庫和一些標準的數據模型,提供了高效地操作大型數據集所需的工具。pandas提供了大量能使我們快速便捷地處理數據的函數和方法。
>>> from pandas import Series, DataFrame
>>> import pandas as pd
目錄
1、常用函數
函數 |
說明 |
pd.isnull(series) pd.notnull(series) |
判斷是否爲空(NaN) 判斷是否不爲空(not NaN) |
2、Series
Series可以運用ndarray或字典的幾乎所有索引操作和函數,融合了字典和ndarray的優點。
屬性 |
說明 |
values |
獲取數組 |
index |
獲取索引 |
name |
values的name |
index.name |
索引的name |
2.1Series常用函數
函數 |
說明 |
Series([x,y,...])Series({'a':x,'b':y,...}, index=param1) |
生成一個Series |
Series.copy() |
複製一個Series |
Series.reindex([x,y,...], fill_value=NaN) Series.reindex([x,y,...], method=NaN) Series.reindex(columns=[x,y,...]) |
重返回一個適應新索引的新對象,將缺失值填充爲fill_value 返回適應新索引的新對象,填充方式爲method 對列進行重新索引 |
Series.drop(index) |
丟棄指定項 |
Series.map(f) |
應用元素級函數 |
eindex的method選項:
ffill, bfill 向前填充/向後填充
pad, backfill 向前搬運,向後搬運
2.2排序函數
排序函數 |
說明 |
Series.sort_index(ascending=True) |
根據索引返回已排序的新對象 |
Series.order(ascending=True) |
根據值返回已排序的對象,NaN值在末尾 |
Series.rank(method='average', ascending=True, axis=0) |
爲各組分配一個平均排名 |
df.argmax() df.argmin() |
返回含有最大值的索引位置 返回含有最小值的索引位置 |
rank的method選項
'average' 在相等分組中,爲各個值分配平均排名
'max','min' 使用整個分組中的最小排名
'first' 按值在原始數據中出現的順序排名
3、DataFrame
DataFrame是一個表格型的數據結構,它含有一組有序的列,每列可以是不同的值類型(數值、字符串、布爾值等)。DataFrame既有行索引也有列索引,它可以被看做由Series組成的字典(共用同一個索引)。
DataFrame可以通過類似字典的方式或者.columnname的方式將列獲取爲一個Series。行也可以通過位置或名稱的方式進行獲取。
爲不存在的列賦值會創建新列。
>>> del frame['xxx'] # 刪除列
3.1常用屬性
屬性 |
說明 |
values |
DataFrame的值 |
index |
行索引 |
index.name |
行索引的名字 |
columns |
列索引 |
columns.name |
列索引的名字 |
ix |
返回行的DataFrame |
ix[[x,y,...], [x,y,...]] |
對行重新索引,然後對列重新索引 |
T |
frame行列轉置 |
3.2常用函數
函數 |
說明 |
DataFrame(dict, columns=dict.index, index=[dict.columnnum]) DataFrame(二維ndarray) DataFrame(由數組、列表或元組組成的字典) DataFrame(NumPy的結構化/記錄數組) DataFrame(由Series組成的字典) DataFrame(由字典組成的字典) DataFrame(字典或Series的列表) DataFrame(由列表或元組組成的列表) DataFrame(DataFrame) DataFrame(NumPy的MaskedArray) |
構建DataFrame 數據矩陣,還可以傳入行標和列標 每個序列會變成DataFrame的一列。所有序列的長度必須相同 類似於“由數組組成的字典” 每個Series會成爲一列。如果沒有顯式制定索引,則各Series的索引會被合併成結果的行索引 各內層字典會成爲一列。鍵會被合併成結果的行索引。 各項將會成爲DataFrame的一行。索引的並集會成爲DataFrame的列標。 類似於二維ndarray 沿用DataFrame 類似於二維ndarray,但掩碼結果會變成NA/缺失值 |
df.reindex([x,y,...], fill_value=NaN, limit) df.reindex([x,y,...], method=NaN) df.reindex([x,y,...], columns=[x,y,...],copy=True) |
返回一個適應新索引的新對象,將缺失值填充爲fill_value,最大填充量爲limit 返回適應新索引的新對象,填充方式爲method 同時對行和列進行重新索引,默認複製新對象。 |
df.drop(index, axis=0) |
丟棄指定軸上的指定項。 |
3.3排序函數
排序函數 |
說明 |
df.sort_index(axis=0, ascending=True) df.sort_index(by=[a,b,...]) |
根據索引排序 |
3.4彙總統計函數
彙總統計函數 |
說明 |
df.count() |
非NaN的數量 |
df.describe() |
一次性產生多個彙總統計 |
df.min() df.min() |
最小值 最大值 |
df.idxmax(axis=0, skipna=True) df.idxmin(axis=0, skipna=True) |
返回含有最大值的index的Series 返回含有最小值的index的Series |
df.quantile(axis=0) |
計算樣本的分位數 |
df.sum(axis=0, skipna=True, level=NaN) df.mean(axis=0, skipna=True, level=NaN) df.median(axis=0, skipna=True, level=NaN) df.mad(axis=0, skipna=True, level=NaN) df.var(axis=0, skipna=True, level=NaN) df.std(axis=0, skipna=True, level=NaN) df.skew(axis=0, skipna=True, level=NaN) df.kurt(axis=0, skipna=True, level=NaN) df.cumsum(axis=0, skipna=True, level=NaN) df.cummin(axis=0, skipna=True, level=NaN) df.cummax(axis=0, skipna=True, level=NaN) df.cumprod(axis=0, skipna=True, level=NaN) df.diff(axis=0) df.pct_change(axis=0) |
返回一個含有求和小計的Series 返回一個含有平均值的Series 返回一個含有算術中位數的Series 返回一個根據平均值計算平均絕對離差的Series 返回一個方差的Series 返回一個標準差的Series 返回樣本值的偏度(三階距) 返回樣本值的峯度(四階距) 返回樣本的累計和 返回樣本的累計最大值 返回樣本的累計最小值 返回樣本的累計積 返回樣本的一階差分 返回樣本的百分比數變化 |
3.5計算函數
計算函數 |
說明 |
df.add(df2, fill_value=NaN, axist=1) df.sub(df2, fill_value=NaN, axist=1) df.div(df2, fill_value=NaN, axist=1) df.mul(df2, fill_value=NaN, axist=1) |
元素級相加,對齊時找不到元素默認用fill_value 元素級相減,對齊時找不到元素默認用fill_value 元素級相除,對齊時找不到元素默認用fill_value 元素級相乘,對齊時找不到元素默認用fill_value |
df.apply(f, axis=0) |
將f函數應用到由各行各列所形成的一維數組上 |
df.applymap(f) |
將f函數應用到各個元素上 |
df.cumsum(axis=0, skipna=True) |
累加,返回累加後的dataframe |
3.6索引
索引方式 |
說明 |
df[val] |
選取DataFrame的單個列或一組列 |
df.ix[val] |
選取Dataframe的單個行或一組行 |
df.ix[:,val] |
選取單個列或列子集 |
df.ix[val1,val2] |
將一個或多個軸匹配到新索引 |
reindex方法 |
將一個或多個軸匹配到新索引 |
xs方法 |
根據標籤選取單行或者單列,返回一個Series |
icol、irow方法 |
根據整數位置選取單列或單行,並返回一個Series |
get_value、set_value |
根據行標籤和列標籤選取單個值 |
運算:
默認情況下,Dataframe和Series之間的算術運算會將Series的索引匹配到的Dataframe的列,沿着列一直向下傳播。若索引找不到,則會重新索引產生並集。
4、Index
pandas的索引對象負責管理軸標籤和其他元數據(比如軸名稱等)。構建Series或DataFrame時,所用到的任何數組或其他序列的標籤都會被轉換成一個Index。Index對象不可修改,從而在多個數據結構之間安全共享。
4.1主要屬性
主要的Index對象 |
說明 |
Index |
最廣泛的Index對象,將軸標籤表示爲一個由Python對象組成的NumPy數組 |
Int64Index |
針對整數的特殊Index |
MultiIndex |
“層次化”索引對象,表示單個軸上的多層索引。可以看做由元組組成的數組 |
DatetimeIndex |
存儲納秒級時間戳(用NumPy的Datetime64類型表示) |
PeriodIndex |
針對Period數據(時間間隔)的特殊Index |
4.2常用函數
函數 |
說明 |
Index([x,y,...]) |
創建索引 |
append(Index) |
連接另一個Index對象,產生一個新的Index |
diff(Index) |
計算差集,產生一個新的Index |
intersection(Index) |
計算交集 |
union(Index) |
計算並集 |
isin(Index) |
檢查是否存在與參數索引中,返回bool型數組 |
delete(i) |
刪除索引i處元素,得到新的Index |
drop(str) |
刪除傳入的值,得到新Index |
insert(i,str) |
將元素插入到索引i處,得到新Index |
is_monotonic() |
當各元素大於前一個元素時,返回true |
is_unique() |
當Index沒有重複值時,返回true |
unique() |
計算Index中唯一值的數組 |