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.columnsshape返回的行数和列数不包含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)
- Dataquest学习总结[2]
- Dataquest学习总结[1]
- Dataquest学习总结[3]
- Dataquest学习总结[4]
- Dataquest学习总结[5]
- Dataquest学习总结[6]
- Dataquest学习总结[7]
- Dataquest学习总结[9]
- Dataquest学习总结[10]
- Dataquest学习总结[8]-Machine Learning
- Dataquest学习代码笔记
- Dataquest Data Scientist Path 整理笔记(2)
- Dataquest用户数据分析
- Dataquest用户流失预测
- Strus 2 学习总结
- linux_shell学习总结(2)...
- vc++学习总结2
- java学习总结2
- WebRTC 简单应用
- js基础:关于Boolean() 与 if
- Eclipse更换Theme
- PowerPC的字节序问题
- React Native 性能优化之可取消的异步操作
- Dataquest学习总结[2]
- JVM(八) 类加载器
- Android -- Wifi启动流程分析
- 2017专利申请流程,专利申请中的细节和注意事项
- 写入iCloud在模拟器和真机上失败的解决办法
- Ubuntu常见问题以及解决方案(长期更新)
- React Native发布APP之打包iOS应用
- 可供创业团队技术开发参考的10条经验
- 猜字母