---
# System prepended metadata

title: Python資料分析3 (黃俊毓老師)
tags: [資料分析, python]

---

# Python資料分析3 (黃俊毓老師)
## 資料清理
* dropna會回傳一個新的dataframe，若要直接更改原本的dataframe要加參數inplace=True
* fillna也會回傳新的dataframe，更改原本的要加參數inplace=True
* 平均數、中位數、眾數：
.mean()、.median()、.mode()
* 整理資料時若發現有時間格式錯誤，可使用df['Date'] = pd.to_datetime(df['Date'])
* 在pandas可以使用.astype('資料型態')強制轉換資料型態
#### Workshop
* 以下是一個班級的段考成績 data.csv
```
Math,English
30, 64
10, 10
70, 20
61, 65
```
* 因為成績實在太悲劇了，所以老師做了以下的補救
    * 算出所有及格的分數平均值 A
    * 將 DataFrame 內不及格的分數以 A 取代

Output示意：
```
   Math  English
0  65.5     64.0
1  65.5     64.5
2  70.0     64.5
3  61.0     65.0
```
* My Code:
```py=
import pandas as pd

df = pd.read_csv('data.csv')

for i in df.columns:
    for j in df.index:
        if df.loc[j,i]<60:
            df.loc[j,i]= None
print(df)
df.fillna(df.mean(), inplace=True)
print(df)
```
* 使用duplicate可查詢是否有重複的列資料，df.duplicate()會回傳一個Series, index是0~n，值是布林值
* df.drop_duplicates(inplace = True)可刪除重複的列
#### Workshop
* 這裡有兩個 csv 檔案
  - [data1.csv](https://drive.google.com/file/d/1Cz1K6Tte1PH2ACF3chCHbpjJd1-fyH6a/view?usp=sharing)
  - [data2.csv](https://drive.google.com/file/d/1-8Pd9LrBLl8lSNg-zQsWbN-EVBAm-BOy/view?usp=sharing)
* 請分別讀取這兩個檔案，以 duplicated 函式判斷是否有重複 rows
    * 有的話，請印出是在那一個 row index 發生的
    * 請刪除該 row
* 程式執行畫面
```
Start to checking data1.csv
Start to checking data2.csv
Got duplicate data in index 12 start to droping ...
```
* 需要遵守的規定
    * 因為需要抓出是那一個index duplicate，所以不要直接使用 drop_duplicates 功能
    * 程式需要與以上的「程式執行畫面」相同
* 可能會用到的功能
    * Series length
        * series.size
* My Code:
```py=
import pandas as pd

df1 = pd.read_csv('data1.csv')
df2 = pd.read_csv('data2.csv')

print("Start to checking data1.csv")
df1_du = df1.duplicated()
print("Start to checking data2.csv")
df2_du = df2.duplicated()

a=[]
for i in df1_du.index:
    if df1_du[i] == True:
        a.append(i)
print("for data1.csv...")
print(f'Got duplicate data in index {a} start to droping ...')
df1.drop_duplicates(inplace=True)

b=[]
for i in df2_du.index:
    if df2_du[i] == True:
        b.append(i)
print("for data2.csv...")
print(f'Got duplicate data in index {b} start to droping ...')
df2.drop_duplicates(inplace=True)
```

###### tags: `python` `資料分析`