pandas是python下強大的數據分析和探索工具,是的python在處理數據時非常快速、簡單。它是構建在numpy之上的,包含豐富的數據處理函數,支持時間序列分析功能,支持靈活處理缺失數據。
pandas基礎
# 安裝 pip install pandas
pandas 基本的數據結構是 Series 和 DataFrame 。Series 就是序列,類似一維數組;DataFrame 則是相當於一張二維的表格,類似二維數組,它的每一列都是一個 Series 。每個 Series 都會帶有一個對應的 Index ,用來標記不同的元素,Index 的內容可以是字母、數字、中文等。
Series
import numpy as np import pandas as pd # 創建Series方法 方法1:s1 = pd.Series([1, 2, 3, 4]) 方法2:s2 = pd.Series(np.arange(10)) # 通過numpy.arange創建 方法3:s3 = pd.Series({'1':1, '2':2, '3':3}) # 通過字典創建 方法4:s4 = pd.Series([1, 2, 3, 4], index=['A', 'B', 'C', 'D']) # 創建時設置索引 s1.values # 查看值 s1.index # 查看索引
DataFrame
from pandas import Series, DataFrame s1 = s2 = s3 = Series([1, 2, 3]) df = DataFrame([s1, s2, s3], index=['A','B','C'], columns=[0, 1, 2]) print(df) # DataFrame 包含 index 和 column,分別為行索引和列索引 out: 0 1 2 A 1 2 3 B 1 2 3 C 1 2 3 df.index # 查看行索引 df.column # 查看列索引
pandas實用操作
I/O操作(df1表示DataFrame格式數據).
1、從粘貼板讀取 df1.to_clipboard() #寫入粘貼板 pd.read_clipboard() # 復制后執行命令,即可讀取到粘貼板中信息 2、CSV文件 df1.to_csv('名字.csv',index=False) # false則表示不添加索引號 pd.read_csv('df1.csv') # 讀取CSV文件 3、json df1.to_json() # 轉化成json文件 pd.read_json(df1.to_json()) # 讀取json文件 4、html df1.to_html('df1_html') # 轉換成HTML文件 5、excel df1.to_excel('df1.xlsx') # 生成Excel文件
查看數據(df1表示DataFrame格式數據)
df1.head() # 返回前五行 df1.tail() # 返回后五行 # 返回更多的內容則在括號中寫出來,不寫則默認為五行 df1.iloc[:,:] # 索引切片,定位,基於index,與索引名無關 df1.loc[:,:] # 根據索引名來,label來過濾 # 取列(column) df1[] # 直接寫column名便取得對應列,若要取多列,中括號內可以寫個列表,eg:['A', 'B'] df1.T # 轉置 df1.describe() # 快速查看數據的統計概要,包括count、mean、std、min等 # 排序 df1.sort_index(axis=1, ascending=False) # 按軸排序,axis表示軸(0為列,1為行),ascending表示正反序 df1.sort_values(by='') # by后寫column,表示按該column值排序
數據運算
在 pandas 中運算會自動對齊 index 和 column 。下面舉例說明。
在 Series 中,兩個Series相加,會自動對齊索引,當索引沒有時,則為NaN,NaN與任何數相加都為NaN,因此會出現圖中【5】的結果,fill_value是將兩個Series中的缺失項先填充,再進行相加運算。DataFrame數據同理,下面不加以贅述。
缺失值
缺失值可以用 numpy.nan 來表示,NaN 具有傳染性,換句話說就是與 NaN 進行運算的結果都是 NaN 。對於含有 NaN 的普通函數計算結果均為 NaN,例如:
a = numpy.array([2, 3, 1, numpy.nan, 4]) numpy.sum(a)\numpy.min(a)\numpy.max(a)等均為NaN # 但是其有安全模式,也就是忽略其中的 NaN 進行運算 numpy.nansum(a)\numpy.nanmin(a)\numpy.nanmax(a) 均會在已有數據中求相應的和,最大最小值
缺失值的發現
data.isnull() data.notnull() # 均返回布爾值
缺失值的去除
data.dropna(axis=0,how='any',thresh=None) # axis表示行和列0,1來表示 # how為any時表示有Nan就刪掉,為all時表示全為nan時才刪掉 # thresh表示一個界限,超過這個數字的nan則被刪掉
缺失值的填充
data.fillna(axis=0, method=ffill) # 或者參數只填一個數,即用該數字填充 axis 坐標軸,行或列 method 填充方式 ffill:forward-fill 從前向后填充 bfill:backward-fill 從后向前填充
合並(merge)
結合(concat) pandas.concat(df1, df2, df3) 連接(join) left = pd.DataFrame({'key': ['foo', 'foo'], 'lval':[1, 2]}) right = pd.DataFrame({'key': ['foo', 'foo'], 'rval':[1, 2]}) pd.merge(left, right, on="key") out: key lval rval 0 foo 1 4 1 foo 1 5 2 foo 2 4 3 foo 2 5 追加(append) data1.append(data2, ignore_index=True)
數據透視表(Pivot Tables)
當分析龐大的數據時,為了更好的發掘數據特征之間的關系,且不破壞原數據,就可以利用透視表 `pivot_table` 進行操作。
新建表將 `A, B, C` 列作為索引進行聚合。 df = pd.DataFrame({'A': ['one', 'one', 'two', 'three'] * 3, 'B': ['A', 'B', 'C'] * 4, 'C': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 2, 'D': np.random.randn(12), 'E': np.random.randn(12)}) pd.pivot_table(df, index=['A', 'B']) 1、透視表按指定行進行聚合 將該 DataFrame 的 `D` 列聚合,按照 `A, B` 列為索引進行聚合,聚合的方式為默認求均值。 pd.pivot_table(df, values=['D'], index=['A', 'B']) 2、透視表聚合方式定義 上一題中 `D` 列聚合時,采用默認求均值的方法,若想使用更多的方式可以在 `aggfunc` 中實現。 pd.pivot_table(df, values=['D'], index=['A', 'B'], aggfunc=[np.sum, len]) 3、透視表利用額外列進行輔助分割 `D` 列按照 `A, B` 列進行聚合時,若關心 `C` 列對 `D` 列的影響,可以加入 `columns` 值進行分析。 pd.pivot_table(df, values=['D'], index=['A', 'B'], columns=['C'], aggfunc=np.sum) 4、透視表的缺省值處理 在透視表中由於不同的聚合方式,相應缺少的組合將為缺省值,可以加入 `fill_value` 對缺省值處理。 pd.pivot_table(df, values=['D'], index=['A', 'B'], columns=['C'], aggfunc=np.sum, fill_value=0)