# [Python] Pandas 資料分析 :::danger ***注意*** : 個人筆記 勿嘴 歡迎編輯 ::: 在電腦編程中,pandas是Python程式語言的用於資料操縱和分析的軟體庫。特別是,它提供操縱數值表格和時間序列的資料結構和運算操作。它是在三條款BSD許可證下發行的自由軟體。它的名字衍生自術語「縱橫資料」(panel data),這是計量經濟學的資料集術語,它們包括了對同一個體的在多個時期上的觀測。它的名字還可解釋為短語「Python data analysis」自身的文字遊戲。 <!-- :::info - [google clobal 連結](https://colab.research.google.com/drive/1pDkHqIQzP6CW97oIqkZMZgHRtpKq99tJ?usp=sharing) ::: --> > #### 引入pandas >```python >import pandas as pd >``` ## Series(一維資料) - 建立 : `pd.Series([list])` ```python data = pd.Series([10, 20, 35, 48]) ``` - 自訂索引 : `pd.Series([list],[index])` ```python! data = pd.Series([10, 20, 35, 48],["python","java","cpp","javascritp"]) ``` #### 觀察資料 - 資料型態 : `data.dtype` - 資料長度 : `data.size` - 資料索引 : `data.index` ```pyrhon! print("資料型態:",data.dtype) print("資料長度:",data.size) print("資料索引:",data.index) ``` #### 取得資料 - 依照順序 : `data[]` **(從0開始)** - 依照index : `data[""]` ```python 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)` ```python! 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` ```python! print("整體加2:",data+2) print("整體減2:",data-2) print("整體乘2:",data*2) print("整體除2:",data/2) print("整體檢測是否等於35:",data==35) ``` :::danger 接下來會是關於**字串** 所以新增 `str_data` ```python! 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(,)` ```python! 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])` ```python! data = pd.DataFrame({ "name":["bob","josh","yang"], "salary":[10000,13500,22255] }) ``` - 自訂index ```python! 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()` ```python! print("資料數量:",data.size) print("資料形狀(列,欄):",data.shape) print("資料索引:",data.index) print("資料欄位:",data.columns) ``` #### 取得資料 - 取得列 - 從順序 : `data.iloc[]` **(從0開始)** - 從index : `data.loc[index]` - 取得欄 : `data[]` **直接用欄位名稱** ```python! print("第3列:",data.iloc[2],sep="\n") print("第c列:",data.loc['c'],sep="\n") print("name欄:",data["name"],sep="\n") ``` > 取得資料類型 : `Series` #### 建立欄位 - 新增欄位(1) : `data[建立欄位名稱] = [list]` ```python! data["age"] = [30,20,26] ``` - 新增欄位(2) : `data[建立欄位名稱] = Series資料` ```python! data["rank"] = pd.Series([5,6,8],index = ["a","b","c"]) ``` #### 更改名稱 - 更改欄位名稱 : `df.rename(columns={"舊":"新"}, inplace = True)` ```python! df.rename(columns={"name":"nickname","salary":"expenditure"}, inplace = True) ``` > inplace = True:不創建新的對象,直接對原始對象進行修改 --- ## 資料篩選 ### Series #### 直接建立布林值篩選條件 > 建立一個條件list(長度相同) 裡面放bool >```python! >age = pd.Series([18,20,15,40]) >condition = [True,True,False,True] >adult = age[condition] >``` #### **實際情況** : 利用比較運算建立篩選條件 > 直接寫條件 例如使用 `str.contains` 來篩選含有 *t* name >```python >name = pd.Series(["Python","Java","Html"]) >condition = [name.str.contains("t")] >t = name[condition] >``` ### DstaFrame #### 在欄位上利用比較運算建立篩選條件 >條件 = data[判斷欄位]+比較 >```python! > 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的檔案 ```PYTHON! df = pd.read_csv('./csv檔案位置') ``` #### 型態轉換 - 字串改數字 : `pd.to_numeric()` ```python! data = pd.to_numeric(data) ``` :::info 題目 : https://www.gushiciku.cn/pl/pUkS/zh-tw ::: ###### tags: `python`