Sololearn 自学机器学习 3 Pandas 数据读取与处理
什么是 Pandas
这整个系列教程将使用机器学习中最常用的编程语言 —— Python。Python 的社群特别强大,里面有无数个有用的且效率高的模组可以用来进行数据处理。包括今天的主角:Pandas
Pandas 是 Python 中用来读取和操作数据的一个库,它可以将数据转换成人们看得懂的表格模式来将数据进行输出,同时它也可以以数值方式对数据进行解释,从而使用户可以对数据进行各种计算。
我们将 Pandas 的数据表称为 DataFrame
读取数据
现在开始使用 pandas
来读取数据,我们习惯将其命名为 pd
,一遍后续能够快速调用
import pandas as pd |
由于在 《训练与测试篇》 中,我们介绍了 训练集 与 测试集 的概念,所以我现在从那边穿越回来,告知读者,我们提供的数据是从 kaggle 下载的已经分离过的 train.csv。如需下载原先 sololearn 提供的数据集,请 点此下载
我们将对泰坦尼克号的数据集进行处理,在 train.csv 数据集中,记录了所有泰坦尼克号乘客的信息,包括以下几种(字段很多,就没一一列举了):
- 幸存情况
- 舱位等级
- 姓名、性别、年龄……等
PassengerId | Survived | Pclass | Lname | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked |
---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 0 | 3 | Braund | Mr. Owen Harris | male | 22 | 1 | 0 | A/5 21171 | 7.25 | S | |
2 | 1 | 1 | Cumings | Mrs. John Bradley (Florence Briggs Thayer) | female | 38 | 1 | 0 | PC 17599 | 71.2833 | C85 | C |
3 | 1 | 3 | Heikkinen | Miss. Laina | female | 26 | 0 | 0 | STON/O2. 3101282 | 7.925 | S | |
4 | 1 | 1 | Futrelle | Mrs. Jacques Heath (Lily May Peel) | female | 35 | 1 | 0 | 113803 | 53.1 | C123 | S |
5 | 0 | 3 | Allen | Mr. William Henry | male | 35 | 0 | 0 | 373450 | 8.05 | S |
我们将使用 pandas 对数据进行读取,可以通过 pandas 的 read_csv
API 对数据进行读取,并转换成 pandas DataFrame 对象:
df = pd.read_csv('train.csv') |
由于 Titanic Dataset 经常作为机器学习的学习用途,所以将其分为训练集和测试集两种,上方链接下载的就是训练集 train.csv
,所以读取的是 train.csv 而非 titanic.csv。
df
现在保存了 titanic 数据集的 DataFrame,接下来可以使用 DataFrame.head()
函数对数据集的首五行进行输出:
print(df.head()) |
将数据进行概述
将所有数据进行输出显然不科学,数据量太大,人脑也无法对其进行分析。我们可以通过 DataFrame.describe()
函数对数据进行概述,他将会返回一个统计表供我们了解整个数据中的各项数值
print(df.describe()) |
describe
函数只会对数值列表进行统计,非数值数据将会被掠过。他将会列出以下几个数据供分析:
Survived Pclass Age Siblings/Spouses Parents/Children Fare |
- Count - 数据总数量
- Mean - 平均值
- Std - 标准平方差(Standard Deviation),用于衡量数据的离散状态)
- Min - 最小值
- 25% - 25 分位数
- 50% - 50 分位数 / 中位数
- 75% - 75 分位数
- Max - 最大值
We use the Pandas describe method to start building some intuition about our data.
我们使用Pandas的describe方法来开始建立对我们的数据的一些直观认识。
选择一个字段
我们需要对数据集中的一些列进行操作,如果需要选择其中一个列,我们使用方括号和列名 ['列名']
,下边的例子就是选择乘客票价的列表
col = df['Fare'] |
我们将 DataFrame 中的某一列称之为 Series
,Series 也是 DataFrame 的一种,但是只有一列数据。
0 7.2500 |
选择多个字段
我们当然可以选择数据集中的多个列来进行操作,创建一个小的 DataFrame。比如说我们选择 Age, Sex, Survived
列作为我们的小 DataFrame。要选取多个列,我们需要使用两个方括号 [['列名1', '列名2', ...]]
来完成,如下所示:
small_df = df[['Age', 'Sex', 'Survived']] |
当选择一列时,我们使用一个方括号,如果选择多列时,我们需要使用两个方括号。
Age Sex Survived |
创建一个字段
我们经常希望我们的数据以比其原始格式稍微不同的方式呈现。例如,我们的数据中的乘客性别是一个字符串(”male” 或 “female”)。这对于人类来说很容易阅读,但当我们稍后对数据进行计算时,我们希望将其表示为布尔值(True 和 False)。
上面提到,我们可以通过选取一列获得一个 pandas Series 类型数据。在这基础上,我们可以直接对整个 Series 进行一些逻辑操作,如:
print(df['Sex'] == 'male') |
执行这段操作之后,相当于 Series 会将整个数据集中的每一行取进行对比,如果是 male
则为 True
反之为 False
,最后得到一个新的 Series
0 True |
那现在就需要创建一个列来保存这些数据,我们可以直接通过和选取列相同的代码来执行这个操作
df['Male'] = df['Sex'] == 'male' |
以上这行代码将会在 df 数据集中创建一个新的数据列 Male
。然后保存 df['Sex'] == 'male'
的结果。
同理,我们可以创建一个用来判断用户是否是头等舱的数据集
df['First Class'] = df['Pclass'] == 1 |