文章目录
第一章 数据载入和初步观察
导入numpy和pandas
-
NumPy系统是Python的一种开源的数值计算扩展,这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表结构要高效的多(该结构也可以用来表示矩阵(matrix))。
-
pandas 是基于NumPy的一种工具,该工具是为解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。它是使Python成为强大而高效的数据分析环境的重要因素之一。
导入: import numpy as np import pandas as pd
绝对路径/相对路径载入数据
-
绝对路径就是最完整的路径
-
相对路径的相对则是不完整路径,这个相对指的就是相对于当前文件夹路径
-
我们常用’/‘来表示相对路径,’\‘来表示绝对路径,
-
绝对路径载入:(2种方法)
import os #导入os 1. os.path.abspath('train.csv') 2. path=os.path.abspath('train.csv')#设置全局变量path df = pd.read_csv(path)#给df重新赋值,再次执行df,仍然可显示出train.csv
-
相对路径载入:
df= pd.read_csv('train.csv')#设置全局变量df,给df赋值,执行df可显示出train.csv
-
载入文件夹的数据:
df=pd.read_csv('文件夹/文件名')
-
读取数据
-
df.head() #输出前五行数据 df.T #表格转置 os.getcwd()#查看当前工作目录
-
read_csv和read_table都是是加载带分隔符的数据,每一个分隔符作为一个数据的标志,但二者读出来的数据格式还是不一样的,read_csv是以,为分隔符,read_table是以制表符 \t 作为数据的标志,也就是以行为单位进行存储。
-
pd.read_csv(path) #以‘,’为分隔符读取数据 pd.read_table(path)#以‘\t(制表符)’为分隔符读取数据 pd.read_table(path,sep=',')=pd.read_csv(path)
-
数据模块 chunksize
-
使用chunksize逐块读取数据后,read_csv操作返回一个TextParser对象
-
例子数据文件总共有10000行数据,使用chunksize=1000后,read_csv操作返回一个TextParser对象,该对象总共有10个元素,遍历过程中打印chunkercount验证得到
-
打印数据:
-
df.get_chunk() #逐块读取后的text file reader文件
-
将表头改为中文
-
df.columns=['乘客ID'...]
初步观察数据
-
df.info() #显示有关DateFrame的信息,包括索引的数据类型dtype和列的数据类型dtype,非空值的数量和内存使用情况。 df.describe()#用于生成描述性统计信息。描述性统计数据:数值类型的包括均值,标准差,最大值,最小值,分位数等;类别的包括个数,类别的数目,最高数量的类别及出现次数等;输出将根据提供的内容而有所不同。
-
df.head(n) #输出表格的前n行 df.tail(n) #输出表格的后n行
-
df.isnull() #判断数据是否为空,为空的地方返回True,其余地方返回False df.shape #返回:(行数,列数)
-
df.to_csv('[文件名]') # 注意:不同的操作系统保存下来可能会有乱码。可以加入`encoding='GBK' 或者 ’encoding = ’utf-8‘‘`
pandas基础
- pandas中有两个数据类型DataFrame和Series,DataFrame是二维数据,Series是一维数据
Series两种定义方法
1. s1=pd.Series([值1,值2...],index=['索引1','索引2'...])
2. s=pd.Series({'a':1,'b':2,'c':3})
用两个一维数据构造一个二维数据
d={'one':pd.Series([1,2,3,4,5],index=['a','b','c','d','e']),'two':pd.Series({'a':1,'b':2,'c':3})} #one、two是列名,abcde是索引,
df=pd.DataFrame(d)
# 将一维数据转为dataframe
survived_sex=survived_sex.to_frame()
数据列相关操作
#查看df数据的每列的项:
df.columns
#查看某列所有的值:
1. df 列名 #series类型
2. df['列名'] #series类型
3. df[['列名']] #DateFrame类型
#删除某列:
test_1=pd.read_csv('test_1.csv') #导入文件
1. del test_1 ['列名'] #原文件上删除,只能删除一列
2. test_1.pop('列名') #原文件上删除,显示删除的那列的数据
3. test_1.drop(['列名'],axis=1) #删除后生成副本文件,原文件该列未删除
#axis=0 删除行;axis=1 删除列
4. test_1.drop(['列名'...],axis=1,inplace=True) #在原文件上删除,给inplace赋值为True
#inplace=True:不创建新的对象,直接对原始对象进行修改;
#inplace=False:对数据进行修改,创建并返回新的对象承载其修改结果。
筛选
1. test_1['Age']<10 #作比较,返回每一行的比较结果:ture/false(返回一维数据)
2. test_1[test_1['Age']<10] #返回二维数据
3. 交集:& 并集:| #ex:midage=test_1[(test_1['Age']>10)&(test_1['Age']<50)]
4. midage.loc[n] #将midage中第n行数据提取出来 (显示一维数据)
5. midage.loc[[100...],['Pclass','Sex',...]] #将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来,显示二维数据
6. midage.iloc[[100,105,108],[3,4,5]] #使用iloc,参数不能为列名,而是第几列
7. midage1=midage.reset_index(drop=True) #将df的索引重新设置一下,设置为0-n
#drop=true,会将原来的索引删掉
创建dataframe数据
sample=pd.DataFrame(np.random.randn(3,3),index=list('213'),columns=list('bca')) #随机生成值
排序
-
sort_values(by, axis=0, ascending=True,inplace=False, kind=‘quicksort’, na_position=‘last’) (默认值,按列排序,升序,替换原有数据)
-
sort_index( axis=0, ascending=True) (默认值,按列排序,升序)
- axis 如果axis=0,那么by=“列名”或者按列索引; 如果axis=1,那么by=“行名”或者按行索引;
- ascending: True则升序,可以是[True,False],即第一字段升序,第二个降序
- inplace: 是否用排序后的数据框替换现有的数据框 ,True或者False
- kind: 排序方法
- na_position : {‘first’, ‘last’}, default ‘last’,默认缺失值排在最后面
1.#按值排序
sample.sort_values('b') #对b列的值排序,默认
2. #按索引排序
sample.sort_index()
3. 任选两列数据同时排序,先排前面的的基础上再排后面的sample.sort_values(['a','c'])#排a的基础上再按c排
计算
1. 两个df数据可以直接计算,但是只计算行索引、列索引都相同的数据,其余为空(df1+df2)
2. 两列也可以直接相加df['列1']+df['列2'],值对应相加
3. df['列名'].mean() #求平均值
4. df['列名'].sum() #求总和
5. 支持除法运算符:/
6. max('列名1')/sum(df['列名2']) # 计算列1的最大值除以列2的总和值
作图
from matplotlib import pyplot as plt #导入数据包matplotlib
plt.hist(df['列名'])# hist直方图的简称