python數據分析工具 | pandas


 

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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM