1 第一章:数据加载
1.1 载入数据
数据集下载 https://www.kaggle.com/c/titanic/overview
1.1.1 任务一:导入numpy和pandas
# 引入环境
import pandas as pd
import numpy as np
【提示】如果加载失败,学会如何在你的python环境下安装numpy和pandas这两个库
1.1.2 任务二:载入数据
(1) 使用相对路径载入数据
df =pd.read_csv('./train.csv')
df
(2) 使用绝对路径载入数据
df =pd.read_csv(r'D:\Users\LENOVO\Desktop\pandas入门\train.csv')
df
【提示】相对路径载入报错时,尝试使用os.getcwd()查看当前工作目录。
【思考】知道数据加载的方法后,试试pd.read_csv()和pd.read_table()的不同,如果想让他们效果一样,需要怎么做?了解一下'.tsv'和'.csv'的不同,如何加载这两个数据集?
【回答】
不同:都是Pandas库中用于读取文本文件的函数,它们主要的区别在于默认的分隔符:read_table是以制表符 \t 作为数据的标志,也就是以行为单位进行存储,每一行字符串为一列;read_csv默认分隔符为逗号,每一个字符串为一列
效果一样:如果想让pd.read_csv()和pd.read_table()的效果一样,可以通过指定sep参数来实现。 pd.read_csv('filename.tsv', sep='\t')实现用pd.read_csv()来读取一个制表符分隔的文件;pd.read_table('filename.csv', sep=',')实现用pd.read_table() 来读取一个逗号分隔的文件
【总结】加载的数据是所有工作的第一步,我们的工作会接触到不同的数据格式(eg:.csv;.tsv;.xlsx),但是加载的方法和思路都是一样的,在以后工作和做项目的过程中,遇到之前没有碰到的问题,要多多查资料吗,使用google,了解业务逻辑,明白输入和输出是什么。
1.1.3 任务三:每1000行为一个数据模块,逐块读取
【思考】什么是逐块读取?为什么要逐块读取呢?
有chunksize参数可以进行逐块加载。它的本质就是将文本分成若干块,每次处理chunksize行的数据,最终返回一个TextParser对象,对该对象进行迭代遍历,可以完成逐块统计的合并处理。
【提示】大家可以chunker(数据块)是什么类型?用`for`循环打印出来出处具体的样子是什么?
1.1.4 任务四:将表头改成中文,索引改为乘客ID [对于某些英文资料,我们可以通过翻译来更直观的熟悉我们的数据]
PassengerId => 乘客ID
Survived => 是否幸存
Pclass => 乘客等级(1/2/3等舱位)
Name => 乘客姓名
Sex => 性别
Age => 年龄
SibSp => 堂兄弟/妹个数
Parch => 父母与小孩个数
Ticket => 船票信息
Fare => 票价
Cabin => 客舱
Embarked => 登船港口
【思考】所谓将表头改为中文其中一个思路是:将英文列名表头替换成中文。还有其他的方法吗?
columns=['乘客ID','是否幸存','仓位等级','姓名','性别','年龄','兄弟姐妹个数','父母子女个数','船票信息','票价','客舱','登船港口']
df =pd.read_csv('./train.csv',names=columns,index_col='乘客ID',header=0)
#header=缺少后会出现英语表头任然存在的问题,即此为header=0的作用
1.2 初步观察
导入数据后,你可能要对数据的整体结构和样例进行概览,比如说,数据大小、有多少列,各列都是什么格式的,是否包含null等
1.2.1 任务一:查看数据的基本信息
1.2.2 任务二:观察表格前10行的数据和后15行的数据
1.2.4 任务三:判断数据是否为空,为空的地方返回True,其余地方返回False
【总结】上面的操作都是数据分析中对于数据本身的观察
【思考】对于一个数据,还可以从哪些方面来观察?找找答案,这个将对下面的数据分析有很大的帮助
①使用df.shape可以查看DataFrame的形状,即行数和列数。
②使用df.dtypes可以查看每列的数据类型,了解数据是如何存储的。
③使用df.describe()可以查看数值型列的描述性统计信息,包括计数、均值、标准差、最小值、四分位数和最大值。
④使用df['column'].unique()可以查看某列的所有唯一值,了解该列的不同取值。
⑤使用df['column'].value_counts()可以查看某列中各个值出现的次数,了解数据的分布情况。 # ’column是具体情况下需替换的具体某列
1.3 保存数据
1.3.1 任务一:将你加载并做出改变的数据,在工作目录下保存为一个新文件train_chinese.csv¶
’
# 注意:不同的操作系统保存下来可能会有乱码。大家可以加入`encoding='GBK' 或者 ’encoding = ’utf-8‘‘`
df.to_csv('train_chinese.csv')
【总结】数据的加载以及入门,接下来就要接触数据本身的运算,我们将主要掌握numpy和pandas在工作和项目场景的运用。
1 第一章:pandas基础
1.4 知道你的数据叫什么
我们学习pandas的基础操作,那么上一节通过pandas加载之后的数据,其数据类型是什么呢?
1.4.1 任务一:pandas中有两个数据类型DateFrame和Series,通过查找简单了解他们。然后自己写一个关于这两个数据类型的小例子🌰[开放题]
1.4.2 任务二:根据上节课的方法载入"train.csv"文件![](https://i-blog.csdnimg.cn/direct/25fdeea7fb954178b9899d198b676c87.png)
1.4.3 任务三:查看DataFrame数据的每列的名称![](https://i-blog.csdnimg.cn/direct/42e008db3c404d23b97be7681ac3d894.png)
1.4.4任务四:查看"Cabin"这列的所有值 [有多种方法]¶
1.4.5 任务五:加载文件"test_1.csv",然后对比"train.csv",看看有哪些多出的列,然后将多出的列删除
经过我们的观察发现一个测试集test_1.csv有一列是多余的,我们需要将这个多余的列删去
【思考】还有其他的删除多余的列的方式吗?
#思考回答
1. df = df.drop('column_name', axis=1)或者df.drop('column_name', axis=1, inplace=True)
#不仅可以删除列,还会返回被删除的列的数据。
2. column_data = df.pop('column_name')
#删除包含任何缺失值的列
3. df = df.dropna(axis=1, how='all') #删除全部为缺失值的列
1.4.6 任务六: 将['PassengerId','Name','Age','Ticket']这几个列元素隐藏,只观察其他几个列元素![](https://i-blog.csdnimg.cn/direct/88a57fbb1a354758b60f4660cd259584.png)
1.5 筛选的逻辑
表格数据中,最重要的一个功能就是要具有可筛选的能力,选出我所需要的信息,丢弃无用的信息。
下面我们还是用实战来学习pandas这个功能。
1.5.1 任务一: 我们以"Age"为筛选条件,显示年龄在10岁以下的乘客信息。¶
1.5.2 任务二: 以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage![](https://i-blog.csdnimg.cn/direct/0a29a417d8514e39abe0df92ff6aa68f.png)
1.5.3 任务三:将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来![](https://i-blog.csdnimg.cn/direct/b0896c40c0b945eb9702bf1084187891.png)
【思考】这个reset_index()函数的作用是什么?如果不用这个函数,下面的任务会出现什么情况?
①reset_index() 是 Pandas 库中的一个函数,通常用于 DataFrame 对象。调用这个函数后,会创建一个新的 DataFrame,其中包含原始 DataFrame 的数据以及索引列。在新的 DataFrame 中,原始的索引被转换为一列,并被命名为 ‘index’(除非通过 name 参数指定了其他名称)。
②如果你有一个 DataFrame,并且想要重置其索引,使其从0开始,你可以使用 reset_index() 方法,用于将 DataFrame 的索引(index)重置为默认整数索引。并且可以选择是否保留原来的索引作为新的列。这通常在分组操作之后使用,比如在使用 groupby() 方法后,每组的索引可能会变成分组键,而不是原始的整数索引。
③会出现的最简单情况:若为100 .150. 108顺序不为从小到大,不加该函数无法正确显示
1.5.4 任务四:使用loc方法将midage的数据中第100,105,108的"Pclass","Name"和"Sex"的数据显示出来![](https://i-blog.csdnimg.cn/direct/6d879b9ecead4984a3d6bc1185c84f43.png)
1.5.5 任务五:使用iloc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来![](https://i-blog.csdnimg.cn/direct/7bda3e6ce9fd467d89c8c44c3650ae5a.png)
【思考】对比`iloc`和`loc`的异同
相同:两者都用于从 DataFrame 或 Series 中选择数据。
对于 DataFrame,两者都支持多维索引(行和列),尽管对于 Series,这简化为仅支持一维索引(因为 Series 只有行,没有列)。
不同:iloc是索引进行定位从0开始,iloc传入的列的索引为真正的索引,而loc传入的为列的名称