pandas資料處理 0722

2021-09-25 11:38:46 字數 4767 閱讀 3207

今天終於把泰坦尼克這個救援資料的基本情況拎出來了,現在把**貼進來,方便後續使用,同時也有一些作為純純的小白的傻傻的注釋。老手們就繞道吧。

import  pandas as pd 

import  numpy as np 

tantic_data = pd.read_csv(r"c:\mafengwo/titanic_train.csv")

#對資料整體情況做乙個檢視,每個變數的缺失程度是怎麼樣的

tantic_data_all = tantic_data.isnull().count().sort_values(ascending =false)

tantic_data_miss =tantic_data.isnull().sum().sort_values(ascending=false)

tantic_miss_percent = (tantic_data_miss/tantic_data_all).sort_values(ascending =false)

tantic_miss_final = pd.concat([tantic_data_all,tantic_data_miss,tantic_miss_percent],axis=1,keys=["data_total","data_miss","miss_percent"],

sort=true).sort_values(ascending=false,by = 'miss_percent')

#這個可以放在檢視缺失資料的前面,檢視資料的整體分布情況,這裡describe只會統計數值型的變數,且只會統計數值中的非空個數

tantic_data.describe()

#一些基本的統計資訊檢視和分布情況

tantic_data['pclass'].value_counts(dropna=false)

#這個函式非常重要 ,和sql中的groupby是相同的作用,基本的統計,使用非常頻繁

all_counts=tantic_data.groupby(['pclass'])['survived'].count()

sur_counts=tantic_data.groupby(['pclass'])['survived'].sum()

sur_percent = sur_counts/all_counts

sur_percent_final = pd.concat([all_counts,sur_counts,sur_percent],axis=1,keys=['all_counts','sur_counts','sur_percent'])

sur_percent_final

#難道真的是艙位越高使用者獲救的可能性就越大嗎

#每個艙位的人獲救情況是怎麼樣的,注意在pyhon中乙個等號表示的是賦值,兩個等號表示的關係判斷。

#例如:tantic_data['pclass'] == 1 表示艙位是否為1等,是返回true,否就返回false

#tantic_data[tantic_data['pclass'] == 1] 這個操作表示的是索引操作,類似sql裡面的where條件裡面的等於,where pclass =1取出來的所有資料

#tantic_data[tantic_data['pclass'] == 1]

#這個函式非常重要 ,和sql中的groupby是相同的作用,基本的統計,使用非常頻繁(這種情況下)

age_all_counts=tantic_data.groupby(['pclass'])['fare'].count()

age_counts=tantic_data.groupby(['pclass'])['fare'].sum()

age_mean=tantic_data.groupby(['pclass'])['fare'].mean()

age_sur_percent = sur_counts/all_counts

age_sur_percent_final = pd.concat([age_all_counts,age_counts,age_sur_percent,age_mean],axis=1,keys=['all_counts','sur_counts','sur_percent','age_mean'])

age_sur_percent_final

fares_by_class ={}

for cla in pclass_list:

pclass_rows = tantic_data[tantic_data['pclass']== cla]#取出來滿足條件的所有資料列,這裡注意,一定是兩個等號

pclsaa_fares = pclass_rows['fare']#這裡是取出來資料中的對應的**列的所有資料,類似where條件

fare_for_class = pclsaa_fares.mean()#直接計算均值

fares_by_class[cla] =fare_for_class#這裡是乙個空字典建立資料的方式?

print(fares_by_class)

passenger_survival = tantic_data.pivot_table(index = 'embarked',values =['age','survived','fare'],

aggfunc=np.sum)#func是按照某種函式進行操作,如果不指定,則預設也是按照均值計算的,判斷是index與values的關係

passenger_survival

#如果想把缺失值全部丟掉 怎麼處理

drop_na_columns = tantic_data.dropna(axis=1)#表示的是任何一行中有空值的時候,都刪掉,最終結果就沒有任何空值了。

drop_na_age_columns = tantic_data.dropna(axis=0,subset=['age','***'])#只把指定列裡面有空值的刪掉了,而沒有選擇的行裡面還是會有缺失的

#對資料整體情況做乙個檢視,每個變數的缺失程度是怎麼樣的

drop_data_all = drop_na_age_columns.isnull().count().sort_values(ascending =false)

drop_data_miss =drop_na_age_columns.isnull().sum().sort_values(ascending=false)

drop_miss_percent = (drop_data_miss/drop_data_all).sort_values(ascending =false)

drop_miss_final = pd.concat([drop_data_all,drop_data_miss,drop_miss_percent],axis=1,keys=["data_total","data_miss","miss_percent"],

sort=true).sort_values(ascending=false,by = 'miss_percent')

drop_miss_final

tantic_data_new = tantic_data.sort_values('age',ascending=false)#預設排序的是公升序的,所以反向的話應該用ascending=false

tantic_data_new = tantic_data_new.reset_index(drop =true)#對於新排序的資料,因為索引是按照原來的的,所以如果想要按照新的,則是如**操作

tantic_data_new.head(10)

#計算每乙個屬性的缺失值個數,首先需要定義乙個函式,這個函式的意義是如果屬性有缺失就拿出來,並且計算個數

def not_null_count(column):

column_null = pd.isnull(column)#這裡是把需要計算空值的屬性取出來。

null = column[column_null]#pandas索引方式獲取資料,布林型只是取出來true的值

return len(null)

#自定義乙個函式,來進行資料的轉化

def which_class(row):#自定義函式中的資料

pclass = row['pclass']#根據需要把需要轉化的列的資料取出來

if pd.isnull(pclass):

return 'unknown'#這裡需要注意下,返回的是乙個結果,也就是說是返回的乙個字串,需要加雙引號,否則就是報錯的

elif pclass == 1:

return 'first'

elif pclass == 2:

return 'second'

elif pclass == 3:

return 'third'

#對連續型變數進行離散化,這個就是什麼叫做連續值離散化

#解決問題思路  首先肯定是通過定義函式的方式實現的,想要的結果是:

#如果空值或缺失就定義為缺失,如果12歲以下的,則定義為child,如果12到20為青年young;20到50為 adult,50及以上為old

def age_mark(df):

age = df['age']

if pd.isnull(age):

return "unknown"

elif age < 12:

return "child"

elif age>=12 and age<18:

return "young"

elif age>=18 and age<50:

return "adult"

elif age>=50:

return "old"

tantic_data.pivot_table(index='age_mark',values =['survived'])  #這裡預設的是獲救的情況,就是求均

pandas 資料處理

pandas中資料可以分為series,dataframe,panel分別表示一維至三維資料。其中在構造時,index表示行名,columns表示列名 構造方式 s pd.series data index index s pd series np random randn 5 index a b ...

pandas資料處理

dataframe.duplicated subset none,keep first 判斷dataframe中的資料是否有重複 必須一行中所有資料都重複才算重複,只能判斷行,不能判斷列 返回series dataframe.drop duplicates subset none,keep firs...

Pandas資料處理

資料處理 pandas from sklearn.preprocessing import minmaxscaler data 1,2 0.5,6 0.10 1,18 將 numpy 轉換成 pd 表 pd.dataframe data 歸一化 0,1 之間 scaler minmaxscaler ...