目錄
- Pandas介紹
- 簡單介紹
- Pandas的基本功能
- Pandas的優勢
- 資料結構
- 為什么有多個資料結構
- 大小可變與資料復制
- Pandas的基本內容
- Pandas的基礎方法
- 資料的生成與有關方法
- 一維陣列
- 二維陣列
- 陣列的其余方法
- Pandas的選擇資料
- 用標簽選取資料
- 切片
- 利用iloc進行選擇
- Boolean indexing布爾索引
- Pandas的缺失值處理
- 洗掉缺失值的行
- 填充缺失值
- 提取NAN值的布爾掩碼
- Pandas的運算
- 統計
- 合并
- concat合并
- join合并
- append追加
- Pandas資料的匯入與匯出
- 資料匯入
- 資料匯出
- 應用實體
- Pandas資料的可視化
- 一維資料的可視化
- 二維陣列的可視化
Pandas介紹
我將在下面簡單介紹Pandas,詳細資訊可以看官方檔案Pandas中文官方檔案
簡單介紹
pandas是python的核心資料分析支持,提供了快速、靈活、明確的資料結構,旨在簡單直觀地處理關系型和標記型資料,Pandas 的目標是成為 Python 資料分析實踐與實戰的必備高級工具,其長遠目標是成為最強大、最靈活、可以支持任何語言的開源資料分析工具,經過多年不懈的努力,Pandas 離這個目標已經越來越近了,
Pandas的基本功能
Pandas適用于處理以下型別的資料:
1.與 SQL 或 Excel 表類似的,含異構列的表格資料;
2.有序和無序(非固定頻率)的時間序列資料;
3.帶行列標簽的矩陣資料,包括同構或異構型資料;
4.任意其它形式的觀測、統計資料集, 資料轉入 Pandas 資料結構時不必事先標記,
pandas的主要資料結構是Series(一維資料)和DataFrame(二維資料),Pandas 基于 NumPy (opens new window)開發,可以與其它第三方科學計算支持庫完美集成,
Pandas的優勢
Pandas比較與其他的資料處理有很多優勢,下面列出部分優勢:
1.處理浮點與非浮點資料里的缺失資料,表示為 NaN;
2.大小可變:插入或洗掉 DataFrame 等多維物件的列;
3.自動、顯式資料對齊:顯式地將物件與一組標簽對齊,也可以忽略標簽,在 Series、DataFrame 計算時自動與資料對齊;
4.強大、靈活的分組(group by)功能:拆分-應用-組合資料集,聚合、轉換資料;
5.把 Python 和 NumPy 資料結構里不規則、不同索引的資料輕松地轉換為 DataFrame 物件;
6.基于智能標簽,對大型資料集進行切片、花式索引、子集分解等操作;
7.直觀地合并(merge)、連接(join)資料集;
8.靈活地重塑(reshape)、透視(pivot)資料集;
9.軸支持結構化標簽:一個刻度支持多個標簽;
10.成熟的 IO 工具:讀取文本檔案(CSV 等支持分隔符的檔案)、Excel 檔案、資料庫等來源的資料,利用超快的 HDF5 格式保存 / 加載資料;
11.時間序列:支持日期范圍生成、頻率轉換、移動視窗統計、移動視窗線性回歸、日期位移等時間序列功能,
資料結構
Series 帶標簽的一維同構陣列
DataFrame 帶標簽的,大小可變的,二維異構表格
為什么有多個資料結構
Pandas 資料結構就像是低維資料的容器,比如,DataFrame 是 Series 的容器,Series 則是標量的容器,使用這種方式,可以在容器中以字典的形式插入或洗掉物件,處理 DataFrame 等表格資料時,index(行)或 columns(列)比 axis 0 和 axis 1 更直觀,用這種方式迭代 DataFrame 的列,代碼更易讀易懂
大小可變與資料復制
Pandas 所有資料結構的值都是可變的,但資料結構的大小并非都是可變的,比如,Series 的長度不可改變,但 DataFrame 里就可以插入列,
Pandas 里,絕大多數方法都不改變原始的輸入資料,而是復制資料,生成新的物件, 一般來說,原始輸入資料不變更穩妥,
Pandas的基本內容
Pandas的基礎方法
資料的生成與有關方法
一維陣列
# 生成一個Series型別的一維陣列
a = pd.Series([1, 2, 3, np.nan, 44, 1])
print(a)
0 1.0
1 2.0
2 3.0
3 NaN
4 44.0
5 1.0
dtype: float64
二維陣列
dates = pd.date_range('20200127', periods=6)
print(dates)
'''第一個引數是資料,第二個引數是行,第三個是列,
詳情可以用print(help(pd.DataFrame))查看'''
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=['a', 'b', 'c', 'd'])
print(df)
DatetimeIndex(['2020-01-27', '2020-01-28', '2020-01-29', '2020-01-30',
'2020-01-31', '2020-02-01'],
dtype='datetime64[ns]', freq='D')
a b c d
2020-01-27 0.292798 -0.217713 -0.535531 -0.113389
2020-01-28 0.811442 -0.761526 -1.245899 -0.083227
2020-01-29 1.445080 2.055359 -1.355587 0.148992
2020-01-30 -0.486965 0.151710 0.574553 0.371862
2020-01-31 1.840392 1.384281 0.580354 2.058363
2020-02-01 0.704466 -0.469254 -0.010766 0.395096
# 指定矩陣直接轉換成二維陣列
df1 = pd.DataFrame(np.arange(12).reshape((3, 4)))
print(df1)
0 1 2 3
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
# 利用字典的方法進行生成
df2 = pd.DataFrame({'A':1, 'B':pd.Timestamp('20210127'), 'C':np.array([3]*4)})
print(df2)
A B C
0 1 2021-01-27 3
1 1 2021-01-27 3
2 1 2021-01-27 3
3 1 2021-01-27 3
陣列的其余方法
print(df2.dtypes)#列印行列的型別
print(df2.columns)#列印行列的序號
print(df2.values)#列印他們的資料
print(df2.describe())#列印數字的平均值,最大值,最小值
print(df2.T)#轉置
print(df2.sort_index(axis=1,ascending=False))#對列排序,倒序(True正序),排序只是對序號
print(df2.sort_values(by='A'))#對值排序,對A,如果不加括號就是所有排序
Pandas的選擇資料
import pandas as pd
import numpy as np
dates = pd.date_range('20210127', periods=6)
df = pd.DataFrame(np.arange(24).reshape((6, 4)), index=dates, columns=['a', 'b', 'c', 'd'])
Pandas支持利用標簽對資料進行選擇,同時也支持切牌你對資料進行操作
用標簽選取資料
# 列印a標簽的所有數值
print(df['a'], df.a)
2021-01-27 0
2021-01-28 4
2021-01-29 8
2021-01-30 12
2021-01-31 16
2021-02-01 20
Freq: D, Name: a, dtype: int32 2021-01-27 0
切片
print(df[0:3], df['20210127':'20210129'])#切片
a b c d
2021-01-27 0 1 2 3
2021-01-28 4 5 6 7
2021-01-29 8 9 10 11 a b c d
2021-01-27 0 1 2 3
2021-01-28 4 5 6 7
2021-01-29 8 9 10 11
print(df.loc['20210128'])#進行選取
a 4
b 5
c 6
d 7
Name: 2021-01-28 00:00:00, dtype: int32
print(df.loc[:, ['a', 'b']])# 列印所有行和a, b 兩列
a b
2021-01-27 0 1
2021-01-28 4 5
2021-01-29 8 9
2021-01-30 12 13
2021-01-31 16 17
2021-02-01 20 21
利用iloc進行選擇
print(df.iloc[3, 1])#利用索引進行選取
print(df.iloc[2:5, 1:3])#切片
print(df.iloc[[1, 3, 5], 1:3])# 索引加切片
Boolean indexing布爾索引
print(df[df.a>8])#列印所有數字大于8的那些行
a b c d
2021-01-30 12 13 14 15
2021-01-31 16 17 18 19
2021-02-01 20 21 22 23
Pandas的缺失值處理
在進行資料處理的程序中很容易遇到空值,對于空值我們也有相應的做法
import pandas as pd
import numpy as np
dates = pd.date_range('20200302', periods=6)
df = pd.DataFrame(np.arange(24).reshape((6, 4)), index=dates, columns = list("ABCD"))
我們先定義幾個空值來示范
df.iloc[0,1] = np.nan
df.iloc[1,2] = np.nan
洗掉缺失值的行
print(df.dropna(axis=0, how='any'))
A B C D
2020-03-04 8 9.0 10.0 11
2020-03-05 12 13.0 14.0 15
2020-03-06 16 17.0 18.0 19
2020-03-07 20 21.0 22.0 23
填充缺失值
print(df.fillna(value=0))
A B C D
2020-03-02 0 0.0 2.0 3
2020-03-03 4 5.0 0.0 7
2020-03-04 8 9.0 10.0 11
2020-03-05 12 13.0 14.0 15
2020-03-06 16 17.0 18.0 19
2020-03-07 20 21.0 22.0 23
提取NAN值的布爾掩碼
print(df.isnull())
print(np.any(df.isnull())==True)
A B C D
2020-03-02 False True False False
2020-03-03 False False True False
2020-03-04 False False False False
2020-03-05 False False False False
2020-03-06 False False False False
2020-03-07 False False False False
True
Pandas的運算
統計
一般情況下,運算時排除缺失值,
'''df.mean()等價于df.mean(0),把軸向資料求平均,得到每列資料的平均值,
df.mean(1)按照另外一個axis的方向來求平均,得到每行資料的平均值,'''
df.mean()
df.mean(1)
不同維度物件運算時,要先對齊,
合并
concat合并
df0 = pd.DataFrame(np.ones((3, 4))*0, columns=list('abcd'),index=[1, 2, 3])
df1 = pd.DataFrame(np.ones((3, 4))*1, columns=list('abcd'),index=[2, 3, 4])
df2 = pd.DataFrame(np.ones((3, 4))*1, columns=list('abcd'))
# 以行的形式進行合并,如果列不夠就忽視
res = pd.concat([df0,df1,df2],axis=0,ignore_index=True)
join合并
left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
res = pd.merge(left, right, on='key')
# how = ['left', 'right', 'outer', 'inner']
res1 = pd.merge(left, right, on='key', how='inner')
append追加
result = df1.append(df2)

Pandas資料的匯入與匯出
資料匯入
pd.read_csv(filename):從CSV檔案匯入資料
pd.read_table(filename):從限定分隔符的文本檔案匯入資料
pd.read_excel(filename):從Excel檔案匯入資料
pd.read_sql(query, connection_object):從SQL表/庫匯入資料
pd.read_json(json_string):從JSON格式的字串匯入資料
pd.read_html(url):決議URL、字串或者HTML檔案,抽取其中的tables表格
pd.read_clipboard():從你的粘貼板獲取內容,并傳給read_table()
pd.DataFrame(dict):從字典物件匯入資料,Key是列名,Value是資料
資料匯出
df.to_csv(filename):匯出資料到CSV檔案
df.to_excel(filename):匯出資料到Excel檔案
df.to_sql(table_name, connection_object):匯出資料到SQL表
df.to_json(filename):以Json格式匯出資料到文本檔案
應用實體
import pandas as pd
#匯入xlsx格式的資料檔案
data=pd.read_excel('檔案地址',sheetname='Sheet1')
#匯入csv格式的資料檔案
data=pd.read_csv('檔案地址',sheetname='Sheet1')
#匯入txt格式的資料檔案,可能會涉及編碼問題或者中文路徑需要先用open函式打開連接,并進行轉碼
op=open('檔案地址',encoding='utf-8')
data=pd.read_table(op)
Pandas資料的可視化
我們可以利用matplotlib進行資料的可視化,利用其中的個plot包進行出圖
一維資料的可視化
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# Series
data = pd.Series(np.random.randn(1000), index=np.arange(1000))
data = data.cumsum()
data.plot()
plt.show()

二維陣列的可視化
data = pd.DataFrame(np.random.randn(1000, 4), index=np.arange(1000), columns=list("ABCD"))
data = data.cumsum()
print(data.head(3))
data.plot()
plt.show()
'''
plot methods:
'bar', 'hist','box','area','scatter','pie'
分別是柱狀圖,直方圖,盒圖,區域面積圖,散點圖,餅圖
'''
ax = data.plot.scatter(x='A', y='B',color='DarkBlue', label="Class 1")
data.plot.scatter(x='A', y='C',color='DarkGreen', label="Class 2",ax=ax)
plt.show()

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/279269.html
標籤:python
上一篇:實驗六 串列與元組 (下)
