MaDi's Blog

一個紀錄自己在轉職軟體工程師路上的學習小空間

0%

Pandas常用語法整理(一) 建立Series/DataFrame/取值/資料運算

什麼是Pandas?

Pandas是Python中常用的套件之一,簡單來說,就是把 Excel的表格觀念丟到Python裡,常見的Excel功能都可以在Pandas裡完成,例如欄位的加總、分群、樞紐分析表、小計、畫折線圖、圓餅圖等等… ,其中Pandas中的資料型態DataFrame更是可以仿照SQL進行資料的處理與運算,與另一個套件numpy都是Python做資料處理常見的工具之一。

為了避免將來忘記Pandas語法的操作,特別寫了一系列的文章來記錄,以便未來查閱~


利用pip下載Pandas套件
pip install pandas as pd

Pandas倚靠三大物件進行運算

  • Series
  • DataFrame
  • Index

1. Series:

  • 可以看成是一維陣列
  • 但與numpy不同的是它可以定義自己的index(任何資料型態)
  • 也可以看成是特殊化的dict(有key,value的關係)

建立基本Series

pd.Series( [元素1,元素2..] )

1
2
3
4
5
6
demo = pd.Series([1,2,3])

0 1
1 2
2 3
dtype: int64

取得index/values

Series.index

1
2
3
demo.index

RangeIndex(start=0, stop=3, step=1)

Series.values

1
2
3
demo.values

array([1, 2, 3], dtype=int64)

建立自定義index的Series

pd.Series( [元素1,元素2…] ,index=[名稱1,名稱2…] )

1
2
3
4
5
6
demo = pd.Series([1,2,3],index=['a','b','c'])

a 1
b 2
c 3
dtype: int64

使用dict來建立Series

pd.Series(字典)

1
2
3
4
5
6
7
demo = {'a':1,'b':2,'c':3}
pd.Series(demo)

a 1
b 2
c 3
dtype: int64

2. DataFrame:

  • 由多個Series所組成
  • 一樣可以指定index

由Series組成DataFrame

pd.DataFrame( {name1: Series1, name2: Series2..} )

1
2
3
4
books = pd.Series({'a':'beam','b':'column','c':'hinge'})
tools = pd.Series({'a':'E-tabs','b':'Sap2000','c':'Revit'})

civil = pd.DataFrame({'books':books,'tools':tools})

DataFrame有 index,values,columns三個屬性

1
2
3
4
5
6
7
8
9
10
11
civil.index
civil.values
civil.columns

Index(['a', 'b', 'c'], dtype='object')

array([['beam', 'E-tabs'],
['column', 'Sap2000'],
['hinge', 'Revit']], dtype=object)

Index(['books', 'tools'], dtype='object')

簡而言之,DataFrame的架構大概長這樣~

column1 column2
index1 value11 value12
index2 value21 value22

從字典建立DataFrame

pd.DataFrame.from_dict{字典}

預設會把字典的key當成DataFrame的column

1
2
demo_dict = {'a':[5,2,0],'A':[9,1,4]}
pd.DataFrame.from_dict(demo_dict)

pd.DataFrame.from_dict{字典, orient=’index’}

把字典的key當成DataFrame的row

1
2
demo_dict = {'a':[5,2,0],'A':[9,1,4]}
demo = pd.DataFrame.from_dict(demo_dict,orient='index')

pd.DataFrame.from_dict{ 字典, orient=’index’, columns=[欄位1,欄位2,欄位3] }

1
2
demo_dict = {'a':[5,2,0],'A':[9,1,4]}
demo = pd.DataFrame.from_dict(demo_dict,orient='index',columns=['1st','2nd','3rd'])

把字典的key當成DataFrame的row以外,也自己命名column的名稱

DataFrame基本運算

整除 餘數 次方
運算子 + - * / // % **

先建立兩個DataFrame

1
2
3
4
5
d1 = {'a':[1,2,3],'b':[2,4,6],'c':[3,6,9]}
d2 = {'a':[10,20,30],'b':[20,40,60],'c':[30,60,90]}

demo1 = pd.DataFrame.from_dict(d1)
demo2 = pd.DataFrame.from_dict(d2)


DataFrame不同欄位也能互相計算

刪除column/row

建立一個DataFrame名叫demo

刪除column

DataFrame.drop(columns=[col1,col2…])

1
demo.drop(columns=['a','c'])

刪除row

DataFrame.drop(index=[index1,index2…])

1
demo.drop(index=[0,2])

資料運算函式: sum(), min(), max(), median(), mean()

DataFrame.資料運算函式( axis )

預設以 index(列) 作為計算,可以修改axis來決定以 columnsindex 來計算

sum() min() max() median() mean()
加總 最小值 最大值 中位數 平均值

其他常用的資料運算函式


節錄至[Day13]Learning Pandas - 處理資料分組

3. Index

前幾筆資料

DataFrame.head(N)

取出前N行的資料

後幾筆資料

DataFrame.tail(N)

取出後N行的資料

遮罩

DataFrame[ 搜尋條件 ]

1
demo[demo['1st']>5]

Fancy索引

DataFrame[ [column1,column2…] ]

傳遞一個list當作index去取得元素

1
demo[['1st','3rd']]

loc取值

DataFrame.loc[ [index1,index2…] ]

index的名稱去取值

1
2
3
4
5
6
demo.loc['A']

1st 9
2nd 1
3rd 4
Name: A, dtype: int64

iloc取值

DataFrame.iloc[ index1的編號,index2的編號… ]

index的編號去取值

1
demo.iloc[:2,:2]

參考

[Day10]Learning Pandas - Series、DataFrame、Index