# [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`