前言
最近自己也在進行Python資料分析的學習,故在此寫下本文作為筆記使用,本文是筆記系列的的第一篇,不定期更新,寫的博客如有錯誤或者疏忽的地方,還望各位大佬指點,在此表示感激不盡,
Pandas是建立在Numpy模組和matplotlib模組之上的,其代碼風格與Numpy非常接近,但最大的不同是,Pandas針對的是表格型資料或異質型資料,而Numpy則更適合處理同質型資料,也就是資料型別相同的資料,
在開始之前,本文默認讀者們都初步了解了Python的基礎知識,有
Numpy模塊有一定了解,
正因為Pandas是在Numpy基礎上實作,其核心資料結構與Numpy的ndarray十分相似,二者之間主要區別是:
🌎從資料結構上看:
- numpy的核心資料結構是ndarray,支持任意維數的陣列,但要求單個陣列內所有資料是同質的,即型別必須相同;而pandas的核心資料結構是Series和Dataframe,僅支持一維和二維資料,但資料內部可以是異構資料,僅要求同列資料型別一致即可
- numpy的資料結構僅支持數字索引,而pandas資料結構則同時支持數字索引和標簽索引
🌎從功能定位上看:
-
numpy雖然也支持字串等其他資料型別,但仍然主要是用于數值計算,尤其是內部集成了大量矩陣計算模塊,例如基本的矩陣運算、線性代數、fft、生成亂數等
-
pandas主要用于資料處理與分析,支持包括資料讀寫、數值計算、資料處理、資料分析和資料可視化全套流程操作
萬物之始,引入pandas包:
import pandas as pd
Pandas有兩個相當常用的資料結構(類):Series和DataFram,本文主要學習這兩類資料結構,
Series.
Series由一組資料以及一組與之相關的資料標簽(即索引)組成,類似表格中的一個列(column),包含index和values兩種屬性,可以通過索引的方式選取Series中的單個或一組值,
Series創建
任何Python中的序列(sequence)都可以傳入Series的生成函式,序列是是Python中最基本的資料結構,包括串列、元組、字串、Unicode字串、buffer物件和xrange物件,如下:
pd.Series(list,index=[ ])
list為傳入序列,index為指定索引,默認為空,見下例:
>> obj = pd.Series([2,3,4,5])
>> obj
0 2
1 3
2 4
3 5
dtype: int64
Series是一種有序的資料型別,在這個例子中,索引在左,值在右,我們傳入了一個串列(當然也可以傳入陣列(ndarray),字典,元組等),如果沒有指定索引,索引值就從 0 開始,我們可以根據索引值讀取資料,當然我們也可以自行指定索引,例如:
>> obj = pd.Series([2,3,4,5],index = ['a','b','c','a'])
>> obj
a 2
b 3
c 4
a 5
dtype: int64
🔺注意!由上面的例子可以看出,Series中的索引是可以重復的!并且哪怕指定了索引,我們仍可利用從0開始的下標索引去讀取,如obj[1] = 3
Series屬性
訪問Series的幾種屬性,這些屬性可以用賦值的方法改變:
In: obj.index #獲取索引
obj.values #獲取值
obj.dtype #獲取資料型別
obj.name = 'text' #給obj起名字
obj.index.name = 'INDEX' #給obj的索引起名字
Out:Index(['a', 'b', 'a', 'd'], dtype='object')
array([2, 3, 4, 5], dtype=int64)
dtype('int64')
Pandas基于Numpy開發,故其中很多操作有共通之處,比如說除了使用下標索引來進行讀取外,還可以利用布爾索引進行讀取,同時可以進行科學計算,
#下標索引
>> obj[1:3]
b 3
a 4
dtype: int64
#布爾索引
>> obj[[True,False,False,True]]
a 2
d 5
dtype: int64
>> obj[obj>=3]
b 3
a 4
d 5
dtype: int64
DataFrame
DataFrame有點像Excel中的資料表,既有行索引又有列索引,每一列的值型別可以不同(數值,字串等),是一種二維的資料型別,

DataFrame創建
pandas.DataFrame(data, index, columns, dtype, copy)
以下列例子說明DataFrame的創建函式:
data = [ #也可以傳入二維的ndarray、序列等
[1,2,3],
[2,3,4],
[3,1,0],
[4,7,9]
]
#第二個引數為行索引,第三個為列索引
frame = pd.DataFrame(data,range(1,5),['a','b','c'])
>> frame #當然未指定索引則默認從0開始
a b c
1 1 2 3
2 2 3 4
3 3 1 0
4 4 7 9
獲取DataFrame的屬性:
In: frame.index #獲取索引
frame.columns #獲取列名
frame.values #獲取值
frame.shape #獲取行列數
frame.dtypes #獲取資料型別,注意為復數
frame.name = 'text' #給frame起名字
frame.index.name = 'INDEX' #給frame的索引起名字
Out:RangeIndex(start=1, stop=5, step=1)
Index(['a', 'b', 'c'], dtype='object')
array([[1, 2, 3],
[2, 3, 4],
[3, 1, 0],
[4, 7, 9]], dtype=int64)
(4, 3)
a int64
b int64
c int64
dtype: object
DataFrame操作
🔺注意!以下操作均是在資料的視圖,而不是拷貝上進行的,因此對DataFrame的操作會改變資料內容
訪問前n行:
>> frame.head(3) #只能輸入整數
a b c
1 1 2 3
2 2 3 4
3 3 1 0
利用索引訪問列:
>> frame[['b','c']] #訪問單列為frame['b']
b c
1 2 3
2 3 4
3 1 0
4 7 9
#或者
>> frame.b #效果同上
修改一整列所有的值,若列名不存在,則生成一個新的列:
>> frame['d'] = (frame.c > 0)
frame
a b c d
1 1 2 3 True
2 2 3 4 True
3 3 1 0 False
4 4 7 9 True
洗掉某幾行/列:
new_frame = frame.drop([2,3],axis = 0) #原frame不變,回傳新的資料,第二個引數為0代表操作行,為1代表操作列
洗掉某幾列:
del frame['d']
洗掉某幾行/列:
new_frame = frame.drop([2,3],axis = 0) #原frame不變,回傳新的資料,第二個引數為0代表操作行,為1代表操作列
洗掉某幾列:
del frame['d']
下面是一些關于索引的操作:

下次應該會寫Pandas的資料讀取啥的,但更新又不知道是什么時候了hhh.
轉載請標注作者和出處鏈接
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/420453.html
標籤:AI
