# 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` `資料分析`