引入包和載入資料
import pandas as pd import numpy as np train_df =pd.read_csv('../datas/train.csv') # train set test_df = pd.read_csv('../datas/test.csv') # test set combine = [train_df, test_df]
清洗資料
檢視資料維度以及型別
缺失值處理
檢視object資料統計資訊
數值屬性離散化
計算特徵與target屬性之間關係
檢視資料維度以及型別
#檢視前五條資料 print train_df.head(5) #檢視每列資料型別以及nan情況 print train_df.info() # 獲得所有object屬性 print train_data.describe(include=['O']).columns
檢視object資料統計資訊
#檢視連續數值屬性基本統計情況 print train_df.describe() #檢視object屬性資料統計情況 print train_df.describe(include=['O']) # 統計Title單列各個元素對應的個數 print train_df['Title'].value_counts() # 屬性列刪除 train_df = train_df.drop(['Name', 'PassengerId'], axis=1) 缺失值處理 # 直接丟棄缺失資料列的行 print df4.dropna(axis=0,subset=['col1']) # 丟棄nan的行,subset指定檢視哪幾列 print df4.dropna(axis=1) # 丟棄nan的列 # 採用其他值填充 dataset['Cabin'] = dataset['Cabin'].fillna('U') dataset['Title'] = dataset['Title'].fillna(0) # 採用出現最頻繁的值填充 freq_port = train_df.Embarked.dropna().mode()[0] dataset['Embarked'] = dataset['Embarked'].fillna(freq_port) # 採用中位數或者平均數填充 test_df['Fare'].fillna(test_df['Fare'].dropna().median(), inplace=True) test_df['Fare'].fillna(test_df['Fare'].dropna().mean(), inplace=True) 數值屬性離散化,object屬性數值化 # 創造一個新列,FareBand,將連續屬性Fare切分成四份 train_df['FareBand'] = pd.qcut(train_df['Fare'], 4) # 檢視切分後的屬性與target屬性Survive的關係 train_df[['FareBand', 'Survived']].groupby(['FareBand'], as_index=False).mean().sort_values(by='FareBand', ascending=True) # 建立object屬性對映字典 title_mapping = {"Mr": 1, "Miss": 2, "Mrs": 3, "Master": 4, "Royalty":5, "Officer": 6} dataset['Title'] = dataset['Title'].map(title_mapping) 計算特徵與target屬性之間關係 object與連續target屬性之間,可以groupby均值 object與離散target屬性之間,先將target數值化,然後groupby均值,或者分別條形統計圖 連續屬性需要先切割然後再進行groupby計算,或者pearson相關係數 print train_df[['AgeBand', 'Survived']].groupby(['AgeBand'], as_index=False).mean().sort_values(by='AgeBand', ascending=True) 總結pandas基本操作 ”' 建立df物件 ””' s1 = pd.Series([1,2,3,np.nan,4,5]) s2 = pd.Series([np.nan,1,2,3,4,5]) print s1 dates = pd.date_range(“20130101”,periods=6) print dates df = pd.DataFrame(np.random.rand(6,4),index=dates,columns=list(“ABCD”)) # print df df2 = pd.DataFrame({“A”:1, ‘B':pd.Timestamp(‘20130102'), ‘C':pd.Series(1,index=list(range(4)),dtype='float32'), ‘D':np.array([3]*4,dtype=np.int32), ‘E':pd.Categorical([‘test','train','test','train']), ‘F':'foo' }) # print df2.dtypes df3 = pd.DataFrame({'col1':s1, 'col2':s2 }) print df3 ''' 2.檢視df資料 ''' print df3.head(2) #檢視頭幾條 print df3.tail(3) #檢視尾幾條 print df.index #檢視索引 print df.info() #檢視非non資料條數 print type(df.values) #返回二元陣列 # print df3.values print df.describe() #對每列資料進行初步的統計 print df3 print df3.sort_values(by=['col1'],axis=0,ascending=True) #按照哪幾列排序 ''' 3.選擇資料 ''' ser_1 = df3['col1'] print type(ser_1) #pandas.core.series.Series print df3[0:2] #前三行 print df3.loc[df3.index[0]] #透過index來訪問 print df3.loc[df3.index[0],['col2']] #透過行index,和列名來唯一確定一個位置 print df3.iloc[1] #透過位置來訪問 print df3.iloc[[1,2],1:2] #透過位置來訪問 print "===" print df3.loc[:,['col1','col2']].as_matrix() # 返回nunpy二元陣列 print type(df3.loc[:,['col1','col2']].as_matrix()) ''' 4.布林索引,過濾資料 ''' print df3[df3.col1 >2] df4 = df3.copy() df4['col3']=pd.Series(['one','two','two','three','one','two']) print df4 print df4[df4['col3'].isin(['one','two'])] df4.loc[:,'col3']="five" print df4 ''' 5.缺失值處理,pandas將缺失值用nan代替 ''' print pd.isnull(df4) print df4.dropna(axis=0,subset=['col1']) # 丟棄nan的行,subset指定檢視哪幾列 print df4.dropna(axis=1) # 丟棄nan的列