一、Pandas概述
Pandas 是基于 NumPy 的一個開源 Python 庫辅鲸,它被廣泛用于快速分析數(shù)據(jù),以及數(shù)據(jù)清洗和準備等工作;主要有兩個主要數(shù)據(jù)結(jié)構(gòu)Series
(1維)和DataFrame
(2維)處理金融妖泄,統(tǒng)計,社會科學和許多工程領(lǐng)域中的絕大多數(shù)典型用例艘策,在Anaconda安裝conda install pandas
蹈胡, 或者用自帶的包管理工具 pip 來安裝pip install pandas
。
二朋蔫、Pandas數(shù)據(jù)結(jié)構(gòu)(series和DataFrame)
- 數(shù)據(jù)結(jié)構(gòu)的創(chuàng)建
Series
首先導(dǎo)入兩個包:
import numpy as np
import pandas as pd
實例:
data = [1,2,3,4,5]
index = [1,2,3,4罚渐,5]
my_series = pd.Series(data)#不設(shè)置index
my_series1 = pd.Series(data, index)#設(shè)置index
print(my_series, 1)
print(my_series1, 2)
結(jié)果:
總結(jié):
上面的
data
參數(shù)可以是任意數(shù)據(jù)對象,比如字典驯妄、列表甚至是 NumPy 數(shù)組荷并,而index 參數(shù)則是對 data 的索引值,類似字典的 key青扔; index
參數(shù)是可省略的源织,你可以選擇不輸入這個參數(shù)。如果不帶 index 參數(shù)微猖,Pandas 會自動用默認 index 進行索引雀鹃,類似數(shù)組,索引值是 [0, ..., len(data) - 1]
-
用Numpy數(shù)組對象和Python字典創(chuàng)建Series
實例:
my_data = [11,12,13,14,15]
my_dict = {'a':11, 'b':12, 'c':13, 'd':14, 'e':15}
np_arry = np.array(my_data)
print(my_data,'numpy的數(shù)組')
my_series = pd.Series(my_data)#用numpy數(shù)組創(chuàng)建Series
my_series1 = pd.Series(my_dict)#用字典創(chuàng)建Series
my_series2 = pd.Series(np.arange(5))
print(my_series, 1)
print(my_series1, 2)
print(my_series2,3)
結(jié)果:
總結(jié)
如果你從一個 Python 字典對象創(chuàng)建 Series励两,Pandas 會自動把字典的鍵值設(shè)置成 Series 的 index
,并將對應(yīng)的 values
放在和索引對應(yīng)的 data 里囊颅。和 NumPy 數(shù)組不同当悔,Pandas 的 Series 能存放各種不同類型的對象。
- Series 里獲取數(shù)據(jù) 訪問 Series 里的數(shù)據(jù)的方式踢代,和
Python 字典
基本一樣:
實例:
my_series1 = pd.Series([1,2,3,4,5],index=['a', 'b', 'c', 'd', 'e'])
print(my_series1)
my_series1['b']
結(jié)果:
-
Series的一些方法和函數(shù):
my_series.values
,my_series.index
,isnull()
實例:
my_series1 = pd.Series([1,2,3,4,5],index=['a', 'b', 'c', 'd', 'e'])
print(my_series1.values,1)
print(my_series1.index,2)
print(my_series1.to_dict,3)
結(jié)果:
-
對 Series 進行算術(shù)運算操作
對 Series 的算術(shù)運算都是基于 index 進行的盲憎。我們可以用加減乘除(+ - * /)這樣的運算符對兩個 Series 進行運算,Pandas 將會根據(jù)索引 index胳挎,對響應(yīng)的數(shù)據(jù)進行計算饼疙,結(jié)果將會以浮點數(shù)的形式存儲,以避免丟失精度慕爬。
實例:
data = [1,2,3,4,5]
data2 =[7,8,9,10,12]
index = [1,2,3,4,5]
my_series = pd.Series(data)
my_series1 = pd.Series(data2, index)
print(my_series, 1)
print(my_series1, 2)
my_series1 - my_series#兩個做差
結(jié)果:
DataFrames
Pandas 的 DataFrame
(數(shù)據(jù)表)是一種 2 維數(shù)據(jù)結(jié)構(gòu)窑眯,數(shù)據(jù)以表格的形式存儲,分成若干行和列医窿。通過 DataFrame
磅甩,你能很方便地處理數(shù)據(jù)。常見的操作比如選取姥卢、替換行或列的數(shù)據(jù)卷要,還能重組數(shù)據(jù)表渣聚、修改索引、多重篩選等
構(gòu)建一個 DataFrame 對象的基本語法如下:
-
Series 來構(gòu)建一個DataFrame:
實例:
dct = {'Campus':pd.Series(['北京','深圳','上海','廣州'], index=['a','b','c','d']),'Num':pd.Series([5000,4000,3000,2000],index=['a','b','c','d']),'Avg':pd.Series(['10K','9.8K','9K','8K'],index=['a','b','c','d'])}
df = pd.DataFrame(dct)
print(df)
#或者
df1 = pd.DataFrame(dct, columns=['Campus','Avg'])
print(df1)
結(jié)果:
- 用一個字典來創(chuàng)建 DataFrame:
dct = {'Campus':['北京','深圳','上海','廣州'],'Num':[5000,4000,3000,2000],'Avg':['10K','9.8K','9K','8K']}
df = pd.DataFrame(dct)
print(df)
#或者
df1 = pd.DataFrame(dct, columns=['Campus','Avg'])
print(df1)
結(jié)果:
-
獲取 DataFrame 中的列
實例:
df['Campus']#獲取DataFrame中的一列
print(type(df['Campus']))#獲取返回的類型
df[['Campus', 'Avg']]#獲取DataFrame中的多列
print(type(df[['Campus', 'Avg']]))#獲取返回的類型
結(jié)果:
總結(jié)
因為我們只獲取一列僧叉,所以返回的就是一個
Series
奕枝。可以用 type() 函數(shù)確認返回值的類型瓶堕,如果獲取多個列隘道,那返回的就是一個 DataFrame
類型。
- 三捞烟、DataFrame的IO操作
Pandas 常用的IO操作列表:
- 復(fù)制表格中的數(shù)據(jù)到剪切板和把數(shù)據(jù)放入到粘粘板中薄声,數(shù)據(jù)可以直接粘粘到excel文件中
df1 = pd.read_clipboard()
和df1.to_clipboard()
- 寫入和讀寫csv文件,可以取消index
df1.to_csv('df1.csv')
、df1.to_csv('df1.csv', index = False)
和df2 = pd.read_csv('df1.csv')
- 轉(zhuǎn)化為json格式和讀取json
df1.to_json()
和pd.read_json(df1.to_json())
- 轉(zhuǎn)換為excel格式和讀取
df1.to_excel('df1.xlsx')
和df1.read_excel('df1.xlsx')
-
df1.head()
和df1.tail()
默認返回前后5行
四题画、Series和DataFramede Reindexing
首先導(dǎo)入from pandas import Series, DaraFrame
實例:
#添加index
s1 = Series(['A', 'B', 'C'], index=[1,5,10])
print(s1)
dct = {'Campus':['北京','深圳','上海','廣州'],'Num':[5000,4000,3000,2000],'Avg':['10K','9.8K','9K','8K']}
df = pd.DataFrame(dct,index=['A','B','C','D'])
print(df)
結(jié)果:
- reindex填充值
實例:
print(s1.reindex(index=[1,5,10,15,20]))#在reindex的時候添加的新的index對應(yīng)的值并未指定,默認就是NaN
print(df.reindex(index=['A','B','C','D','E'],columns=['Campus','Num','Avg','Year']))
print(s1.reindex(index=[1,5,10,15,20], fill_value=10 ))#為新的index指定固定值10
print(df.reindex(index=['A','B','C','D','E'],columns=['Campus','Num','Avg','Year'],fill_value=10))
#其他填充值的方法:
print(s1.reindex(index=range(15),method='ffill'))
結(jié)果:
- 切割和刪除(drop)
當reindex時指定的index少于原有的index的情況:這是一個類似于切割的操作
實例:
#這是一個類似于切割的操作
print(s1.reindex(index=[1,5]))
print(df.reindex(index=['A','B',],columns=['Num','Avg']))
print('drop刪除')
print(s1.drop(5))
print(df.drop('B'))
print(df.drop('Num',axis=1))
結(jié)果:
總結(jié):
drop()函數(shù)的參數(shù)axis默認等于0默辨,刪除行,當axis=1苍息,刪除列缩幸,當然還有其他的參數(shù)例如how
指定刪除的模式,thresh
多余大于就會被刪除
五竞思、Mapping與Replace
-
map
實例:
df1 = DataFrame({"城市":["北京","上海","廣州"], "人口":[1000,2000,1500]},index = ['A','B','C'])
print(df1,'$$$$$$$$$$')
df1['GDP'] = Series([900,1600,3000])# 用Series添加一列
print(df1,'**************')
gdp_map = {"北京":900,"上海":1600,"廣州":3000}#使用map添加一列
df1['GDP'] = df1['城市'].map(gdp_map)
print(df1,'&&&&&&&&&&&&&&&&')
結(jié)果:
map的優(yōu)勢在與不需要關(guān)心index的順序
replace
實例:
s1 = Series(np.arange(5))
print(s1)
print(s1.replace(1,np.nan))#將一個值替換成NaN
print(s1.replace([2,3,4],[20,30,40]))#替換多個值
結(jié)果:
repalce的優(yōu)勢在于不管替換一個值還是多個值都很方便