1102 機器學習

DP前言筆記整理

這篇文章是學習時整理的一些筆記,讓自己複習時方便,文章內容為上課之內容整理

Introduction

  • Pandas是在用Python建立模型之前進行資料預處理的便利函式庫
  • Pandas可對各式各樣的資料進行有彈性地加工處理 ,執行表格試算與資料抽出、搜尋等操作

使用前須import模組:

1
2
import pandas as pd
from pandas import Series, DataFrame

Series是是處理一維陣列的函式庫、Dataframe是處理二維陣列的函式庫

Series

基本用法

1
2
3
4
data = pd.Series([0, 10, 20, 30, 40, 50, 60, 70])

print("values:", data.values) #取得資料值
print("index:", data.index) #取得索引值

values: [0, 10, 20, 30, 40, 50, 60, 70]
index: RangeIndex(start=0, stop=10, step=1)

指定索引值

1
2
3
4
5
data = pd.Series([0, 10, 20, 30, 40, 50, 60, 70],
index=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print("values:", data.values) #取得資料值
print("index:", data.index) #取得索引值

values: [0, 10, 20, 30, 40, 50, 60, 70]
index: Index([‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’, ‘h’])

DataFrame

基本用法

1
2
3
4
5
6
7
data = pd.DataFrame('ID': ['100', '101', '102'],
'city': ['Taipei', 'Hsinchu', 'Tainan'],
'Birth_year': [1990, 1989, 1992],
'Name': ['Sally', 'Hanks', 'Hannah'])

df = DataFrame(data) #構建dataframe
df1 = DataFrame(data, index=['a', 'b', 'c']) #也可以和series一樣指定索引值

行列操作

1
print(df.T) #行列互換

資料抽取

1
2
3
4
5
6
7
8
9
print(df.Birth_year) #特定取出某一行
print(df[['ID', 'Birth_year']]) #特定取出多行(在df後面無多一個點)

print(df[df['city'] == 'Taipei']) #特定資料的過濾(印出city為taipei的資料)
print(df['city'] == 'Taipei') #回傳布林值 每一行均印出一個布林值判斷cit是否為taipei
print(df[df['city'].isin(['Taipei', 'Tainan'])]) #指定多個條件 (印出city為taipei和tainan的資料)

print(df.iloc[:,:2]) #印出前兩行的資料
print(df.iloc[0:1,:]) #印出前一列的資料

行列刪除

若要刪除特定行或列,則可以用drop方式

axis=0 為列, axis=1 為行

drop後並不會真的對原資料操作,若是要改動原資料,需進行assign的動作

1
print(df.drop(['Brith_year'], axis=1)) #印出刪掉birth_year這行後的資料

行列結合

若要將兩個DataFrame合併可以使用merge函式,merge會找共同欄位的資料做合併的動作
(如以下兩個資料的共同欄位是ID則會選擇ID一樣的進行合併)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
data1 = pd.DataFrame('ID': ['100', '101', '102'],
'city': ['Taipei', 'Hsinchu', 'Tainan'],
'Birth_year': [1990, 1989, 1992],
'Name': ['Sally', 'Hanks', 'Hannah'])

data2 = pd.DataFrame('ID': ['100', '101', '102', '105', '107'],
'Math': [ 50, 70, 90, 70, 50],
'English': [ 40, 60, 80, 60, 40],
'Sex': ['M', 'F', 'F', 'M', 'M'])

df1 = DataFrame(data1)
df2 = DataFrame(data2)

pd.merge(df1, df2)

合併後資料:
‘ID’: [‘100’, ‘101’, ‘102’],
‘city’: [‘Taipei’, ‘Hsinchu’, ‘Tainan’],
‘Birth_year’: [1990, 1989, 1992],
‘Name’: [‘Sally’, ‘Hanks’, ‘Hannah’]
‘Math’: [ 50, 70, 90],
‘English’: [ 40, 60, 80],
‘Sex’: [‘M’, ‘F’, ‘F’]

資料統計

使用groupby可以以某個特定的行為對資料進行統計

1
print(data2.groupby('Sex')['Math'].mean()) #印出以Sex為區分的數學平均值

印出後資料:
Sex
F 80.000000
M 56.666666
Name: Math, dtype: float64

資料排序

排序可以針對索引值來排序,也可以針對值來排序

1
2
print(data2.sort_index()) #印出以index排序的結果
print(data1.Birth_year.sort_values()) #印出以生日排序後的結果

資料缺值

使用isnull判斷資料是否為nan

1
2
print(data2.isnull()) #印出資料是否為nan的布林值
print(data2.isnull().sum()) #印出資料為nan的數量