Try   HackMD

[Python] Pandas 資料分析

注意 : 個人筆記 勿嘴 歡迎編輯

在電腦編程中,pandas是Python程式語言的用於資料操縱和分析的軟體庫。特別是,它提供操縱數值表格和時間序列的資料結構和運算操作。它是在三條款BSD許可證下發行的自由軟體。它的名字衍生自術語「縱橫資料」(panel data),這是計量經濟學的資料集術語,它們包括了對同一個體的在多個時期上的觀測。它的名字還可解釋為短語「Python data analysis」自身的文字遊戲。

引入pandas

import pandas as pd

Series(一維資料)

  • 建立 : pd.Series([list])
data = pd.Series([10, 20, 35, 48])
  • 自訂索引 : pd.Series([list],[index])
data = pd.Series([10, 20, 35, 48],["python","java","cpp","javascritp"])

觀察資料

  • 資料型態 : data.dtype
  • 資料長度 : data.size
  • 資料索引 : data.index
print("資料型態:",data.dtype)
print("資料長度:",data.size)
print("資料索引:",data.index)

取得資料

  • 依照順序 : data[] (從0開始)
  • 依照index : data[""]
print("依照順序:",data[2])
print("依照index:",data["cpp"])

數字基本運算

  • 最大值 : data.max()
  • 最小值 : data.min()
  • 總和 : data.sum()
  • 平均值 : data.mean()
  • 中位數 : data.median()
  • 標準差 : data.std()
  • 最大的n個數 : data.nlargest(n)
  • 最小的n個數 : data.nsmallest(n)
print("最大值:",data.max())
print("最小值:",data.min())
print("總和:",data.sum())
print("平均值:",data.mean())
print("中位數:",data.median())
print("標準差:",data.std())
print("最大的3個數:\n",data.nlargest(3))
print("最小的2個數:\n",data.nsmallest(2))

對整體數據進行運算

  • 加法 : data+2
  • 減法 : data-2
  • 乘法 : data*2
  • 除法 : data/2
  • 布林值 : data==35
print("整體加2:",data+2)
print("整體減2:",data-2)
print("整體乘2:",data*2)
print("整體除2:",data/2)
print("整體檢測是否等於35:",data==35)

接下來會是關於字串 所以新增 str_data

str_data = pd.Series(["Hellow","Python","Pandas"])

字串運算

  • 全部變成大寫 : str_data.str.upper()
  • 全部變成小寫 : str_data.str.lower()
  • 算出每個字串長度 : str_data.str.len()
  • 字串連接 : str_data.str.cat(sep=) (使用 sep 設定串接符號)
  • 搜尋字串是否含有特定字串 : str_data.str.contains()
    • 忽略大小寫 : str_data.str.contains(,case=False)
  • 替換特定字串 : str_data.str.replace(,)
print(str_data.str.upper())
print(str_data.str.lower())
print(str_data.str.len())
print(str_data.str.cat(sep=','))
print(str_data.str.contains("P"))
print(str_data.str.replace("Hellow","你好"))

DataFrame

  • 建立 : pd.DataFrame([dictionary])
data = pd.DataFrame({
    "name":["bob","josh","yang"],
    "salary":[10000,13500,22255]
})
  • 自訂index
data = pd.DataFrame({
    "name":["bob","josh","yang"],
    "salary":[10000,13500,22255]
},index=["a","b","c"])

觀察資料

  • 資料數量 : data.size
  • 資料形狀 : data.shape
  • 資料索引 : data.index
  • 資料欄位 : data.columns
  • 不同值有在該欄中的數量 : df[].value_counts()
print("資料數量:",data.size)
print("資料形狀(列,欄):",data.shape)
print("資料索引:",data.index)
print("資料欄位:",data.columns)

取得資料

  • 取得列
    • 從順序 : data.iloc[] (從0開始)
    • 從index : data.loc[index]
  • 取得欄 : data[] 直接用欄位名稱
print("第3列:",data.iloc[2],sep="\n")
print("第c列:",data.loc['c'],sep="\n")
print("name欄:",data["name"],sep="\n")

取得資料類型 : Series

建立欄位

  • 新增欄位(1) : data[建立欄位名稱] = [list]
data["age"] = [30,20,26]
  • 新增欄位(2) : data[建立欄位名稱] = Series資料
data["rank"] = pd.Series([5,6,8],index = ["a","b","c"])

更改名稱

  • 更改欄位名稱 : df.rename(columns={"舊":"新"}, inplace = True)
df.rename(columns={"name":"nickname","salary":"expenditure"}, inplace = True)

inplace = True:不創建新的對象,直接對原始對象進行修改


資料篩選

Series

直接建立布林值篩選條件

建立一個條件list(長度相同) 裡面放bool

age = pd.Series([18,20,15,40])
condition = [True,True,False,True]
adult = age[condition]

實際情況 : 利用比較運算建立篩選條件

直接寫條件 例如使用 str.contains 來篩選含有 t name

name = pd.Series(["Python","Java","Html"])
condition = [name.str.contains("t")]
t = name[condition]

DstaFrame

在欄位上利用比較運算建立篩選條件

條件 = data[判斷欄位]+比較

data = pd.DataFrame({
    "name":["bob","josh","yang"],
    "salary":[10000,13500,22255]
},index=["a","b","c"])

condition = data["salary"]>=13000
high_salary = data[condition]

其他

檔案讀取

  • 使用 read_csv() 讀取一個CSV的檔案
df = pd.read_csv('./csv檔案位置')

型態轉換

  • 字串改數字 : pd.to_numeric()
data = pd.to_numeric(data)
tags: python