Dataquest学习总结[2]

来源:互联网 发布:阿里java开发规范手册 编辑:程序博客网 时间:2024/06/12 04:11

Step 2: Intermediate Python And Pandas


A. Numpy相关知识:

>>使用numpy读取csv文件

import numpy
nfl = numpy.genfromtxt("nfl.csv", delimiter=",")

会返回一个numpy的array结果,即numpy.ndarray class,但是读取进来的好像默认转为float型(不能转换的则变为NAN),除非调节genfromtxt里的参数,如令dtype="U75"。

>>numpy.array()函数返回ndarray对象,ndarray对象的shape性质(ndarray.shape)可以得到一个关于维度的tuple

>>ndarray中各个元素需要是相同的type,查看type用ndarray.dtype

>>注意,在ndarray的操作中,如果限制有多个条件,是用& 和|,而不是常规的and和or(各个条件用()进行封闭):

例: vector = numpy.array([5, 10, 15, 20])

         equal_to_ten_and_five = (vector == 10) & (vector == 5)

>>转换ndarray中元素的类型,采用函数ndarray.astype( ),如:vector.astype(float)

>>ndarray其他函数,ndarray.sum()   ndarray.mean()    ndarray.max()   其中包含参数axis=1表示对每一row运算得列,axis=0表示对每一column运算得到行

>>ndarray综合操作,包含里面元素的选择提取,替换,求和等:


其中world_alcohol大概是这种形式:


即提取world_alcohol中年份为'1986',国家为"Canada'的row,然后对该提取的数据中最后一列不合法的' '元素替换为'0',并进行float转换最后求和


B. Pandas相关知识

>>pandas读取CSV文件的方式,返回一个DataFrame类:

import pandas as pdinfo=pd.read_csv("XXX.csv")
>>DataFrame类的几个函数和性质(head,shape):

info_n_rows=info.head(n)dimisions=info.shaperows=dimisions[0]columns=dimisions[1]
column_info=info.columns
shape返回的行数和列数不包含headers信息以及第一列的行数信息,即不含表头只有表中数据的行列。

>>取出DataFrame中某一行则返回一个Series类型

third_row=info.loc[2]
比如取出第三行的数据,注意这里2是真实的下标,即0,1,2所以为第三行;如果真实index为1,2,3...,则上面相当于取第二行

>>取出DataFrame中某几行的数据,返回的则是DataFrame

multi_rows=info.loc[:2]multi_rows_1=info.loc[[2,3,5]]
第一条语句取出前三行0,1,2的数据,第二条语句取出标记为2,3,5行的数据

注意这里与list切片操作不一样[a:b],是取出从a到b行的数据(a和b反映真实index值),并不是到b-1行;并且loc[]里的参数要么是一个数要么是一个list,不能传入多个参数

>>取出DataFrame中某一列的数据,直接取出某个column值即可,返回的也是Series类型,如:

ndb_col = info["NDB_No"]
>>取出DataFrame中某几列的数据,返回的是DataFrame

zinc_copper =info[["Zinc_(mg)", "Copper_(mg)"]]
>>DataFrame中各元素的类型,DataFrame.dtypes包含有这些情况:

object - for representing string values.
int - for representing integer values.
float - for representing float values.
datetime - for representing time values.
bool - for representing Boolean values.

即与ndarray不同,一个DataFrame中不同column的元素类型可以不同,不用再进行类型转换。

>>可以直接对DataFrame中的数值列进行数值计算,返回的Series,如:

div_1000 = info["Iron_(mg)"] / 1000
>>Series.max()方法返回该Series中的最大元素值

>>DataFrame.sort_values( )方法,传入某个column的名字,根据该column进行排序

info.sort_values("Sodium_(mg)", inplace=True, ascending=False)
>> pandas.isnull() 传入参数Series,用于判断里面元素哪些是空'NAN'或者None,返回True和False。用于处理数据缺失

>>Series.mean()方法用于求均值

>>注意区别:

test_1=info[:2]                                   #选出0,1行test_2=info.loc[:2]                          #选出0,1,2行test_3=info["Iron(mg)"]                           #选出"Iron(mg)"列test_4=info.iloc[:2,:2]                           #选出区域0,1行和0,1列test_5=info.loc[:2,["Iron(mg)","Sodium(mg)"]]     #选出区域0,1,2行和"Iron(mg)","Sodium(mg)"列

loc的索引是封闭的,且根据真实索引值,可用于选出区域

iloc索引是不封闭的,是根据行列的数值(从0开始)而不是真实值,可用于选出区域

直接索引[ ]是不封闭的,但是不能用于选择区域

>>DataFrame的其他功能,pivot_table:

passenger_class_fares = titanic_survival.pivot_table(index="pclass", values="fare", aggfunc=np.mean)
根据"pclass"列进行groupby,然后排好后对"fare"列进行均值计算

DataFrame.dropna() 方法  用于抛出那些有空的行或列:

new_titanic_survival=titanic_survival.dropna(axis=0,how="any",subset=["age","sex"])
DataFrame.reset_index() 方法,用于重新设置index,默认为从0开始:

titanic_reindexed=new_titanic_survival.reset_index(drop=True)print(titanic_reindexed.iloc[:5,:3])

DataFrame.apply()   对DataFrame进行函数应用,默认计算每一列,传入axis=1时计算每一行   


最后关于使用titanic_survival.csv数据集进行处理的代码总结如下:

import pandas as pdtitanic_survival=pd.read_csv("titanic_survival.csv")age = titanic_survival["age"]idx=pandas.isnull(age)age_null_true=age[idx]age_null_count=len(age_null_true)print(age_null_count)age_is_null = pd.isnull(titanic_survival["age"])age_not_null=titanic_survival["age"][age_is_null==False]correct_mean_age=age_not_null.mean()correct_mean_age = titanic_survival["age"].mean()correct_mean_fare=titanic_survival["fare"].mean()passenger_classes = [1, 2, 3]fares_by_class = {}for pc in passenger_classes:    rows=titanic_survival["fare"][titanic_survival["pclass"]==pc]    fares_by_class[pc]=rows.mean()passenger_age = titanic_survival.pivot_table(index="pclass", values="age")print(passenger_age)import numpy as npport_stats=titanic_survival.pivot_table(index="embarked",values=["fare","survived"],aggfunc=np.sum)print(port_stats)drop_na_rows = titanic_survival.dropna(axis=0)drop_na_columns=titanic_survival.dropna(axis=1)new_titanic_survival=titanic_survival.dropna(axis=0,how="any",subset=["age","sex"])# We have already sorted new_titanic_survival by agefirst_five_rows = new_titanic_survival.iloc[0:5]first_ten_rows=new_titanic_survival.iloc[0:10]row_position_fifth=new_titanic_survival.iloc[4]row_index_25=new_titanic_survival.loc[25]titanic_reindexed=new_titanic_survival.reset_index(drop=True)print(titanic_reindexed.iloc[:5,:3])def count_null(data):    return len(data[pandas.isnull(data)])column_null_count=titanic_survival.apply(count_null)def age_info(data):    if data["age"]<18:        return "minor"    elif data["age"]>=18:        return "adult"    else:        return "unknown"age_labels=titanic_survival.apply(age_info,axis=1)age_group_survival=titanic_survival.pivot_table(index='age_labels',values="survived",aggfunc=np.mean)
0 0