In [1]: import pandas as pd
- 泰坦尼克号数据集
本教程使用以 CSV 格式存储的泰坦尼克号数据集。该数据包含以下数据列:
PassengerId: 每位乘客的 ID。
Survived: 乘客是否存活的指示。
0表示否,1表示是。Pclass: 三个船票等级之一:
1等,2等,以及3等。Name: 乘客姓名。
Sex: 乘客性别。
Age: 乘客年龄(以年为单位)。
SibSp: 船上的兄弟姐妹或配偶数量。
Parch: 船上的父母或子女数量。
Ticket: 乘客的船票号。
Fare: 票价。
Cabin: 乘客的客舱号。
Embarked: 登船港口。
如何读写表格数据?#
我想分析泰坦尼克号乘客数据,该数据可作为 CSV 文件提供。
In [2]: titanic = pd.read_csv("data/titanic.csv")
pandas 提供了
read_csv()函数,用于将存储为 CSV 文件的数据读取到 pandasDataFrame中。pandas 内置支持多种不同的文件格式或数据源(csv、excel、sql、json、parquet 等),每种格式都带有read_*前缀。
读取数据后,请务必始终检查数据。默认情况下,显示 DataFrame 时,会显示前 5 行和后 5 行。
In [3]: titanic
Out[3]:
PassengerId Survived Pclass ... Fare Cabin Embarked
0 1 0 3 ... 7.2500 NaN S
1 2 1 1 ... 71.2833 C85 C
2 3 1 3 ... 7.9250 NaN S
3 4 1 1 ... 53.1000 C123 S
4 5 0 3 ... 8.0500 NaN S
.. ... ... ... ... ... ... ...
886 887 0 2 ... 13.0000 NaN S
887 888 1 1 ... 30.0000 B42 S
888 889 0 3 ... 23.4500 NaN S
889 890 1 1 ... 30.0000 C148 C
890 891 0 3 ... 7.7500 NaN Q
[891 rows x 12 columns]
我想查看 pandas DataFrame 的前 8 行。
In [4]: titanic.head(8) Out[4]: PassengerId Survived Pclass ... Fare Cabin Embarked 0 1 0 3 ... 7.2500 NaN S 1 2 1 1 ... 71.2833 C85 C 2 3 1 3 ... 7.9250 NaN S 3 4 1 1 ... 53.1000 C123 S 4 5 0 3 ... 8.0500 NaN S 5 6 0 3 ... 8.4583 NaN Q 6 7 0 1 ... 51.8625 E46 S 7 8 0 3 ... 21.0750 NaN S [8 rows x 12 columns]
要查看
DataFrame的前 N 行,请使用head()方法,并将所需的行数(此处为 8)作为参数传入。
注意
对最后 N 行感兴趣?pandas 还提供了 tail() 方法。例如,titanic.tail(10) 将返回 DataFrame 的最后 10 行。
通过请求 pandas 的 dtypes 属性,可以检查 pandas 如何解释每个列的数据类型。
In [5]: titanic.dtypes
Out[5]:
PassengerId int64
Survived int64
Pclass int64
Name str
Sex str
Age float64
SibSp int64
Parch int64
Ticket str
Fare float64
Cabin str
Embarked str
dtype: object
对于每一列,都会列出使用的数据类型。此 DataFrame 中的数据类型为整数(int64)、浮点数(float64)和字符串(object)。
注意
在请求 dtypes 时,不使用括号 ()!dtypes 是 DataFrame 和 Series 的一个属性。 DataFrame 或 Series 的属性不需要 ()。属性表示 DataFrame/Series 的一个特征,而方法(需要括号 ())则会对 DataFrame/Series 执行某些操作,如在 第一个教程 中所述。
我的同事将泰坦尼克号数据请求为电子表格。
注意
如果您想使用
to_excel()和read_excel(),您需要安装 Excel 读取器,具体方法请参见安装文档的 Excel 文件 部分。In [6]: titanic.to_excel("titanic.xlsx", sheet_name="passengers", index=False)
whereas
read_*函数用于将数据读入 pandas,而to_*方法用于存储数据。to_excel()方法将数据存储为 Excel 文件。在此示例中,sheet_name被命名为 *passengers*,而不是默认的 *Sheet1*。通过设置index=False,行索引标签不会保存在电子表格中。
等效的读取函数 read_excel() 会将数据重新加载到 DataFrame 中。
In [7]: titanic = pd.read_excel("titanic.xlsx", sheet_name="passengers")
In [8]: titanic.head()
Out[8]:
PassengerId Survived Pclass ... Fare Cabin Embarked
0 1 0 3 ... 7.2500 NaN S
1 2 1 1 ... 71.2833 C85 C
2 3 1 3 ... 7.9250 NaN S
3 4 1 1 ... 53.1000 C123 S
4 5 0 3 ... 8.0500 NaN S
[5 rows x 12 columns]
我对
DataFrame的技术摘要感兴趣。In [9]: titanic.info() <class 'pandas.DataFrame'> RangeIndex: 891 entries, 0 to 890 Data columns (total 12 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 PassengerId 891 non-null int64 1 Survived 891 non-null int64 2 Pclass 891 non-null int64 3 Name 891 non-null str 4 Sex 891 non-null str 5 Age 714 non-null float64 6 SibSp 891 non-null int64 7 Parch 891 non-null int64 8 Ticket 891 non-null str 9 Fare 891 non-null float64 10 Cabin 204 non-null str 11 Embarked 889 non-null str dtypes: float64(2), int64(5), str(5) memory usage: 118.7 KB
info()方法提供了有关DataFrame的技术信息,让我们详细解释其输出。它确实是一个
DataFrame。有 891 条条目,即 891 行。
每一行都有一个行标签(也称为
index),其值范围从 0 到 890。该表有 12 列。大多数列对于每一行都有一个值(所有 891 个值都是
non-null)。有些列确实存在缺失值,其non-null值少于 891 个。Name、Sex、Cabin和Embarked列包含文本数据(字符串,也称为object)。其他列是数值数据,其中一些是整数(integer),另一些是实数(float)。不同列中数据的类型(字符、整数等)通过列出
dtypes来进行总结。还提供了保存 DataFrame 所需的大致 RAM 数量。
请记住
通过
read_*函数,可以从多种不同的文件格式或数据源获取数据到 pandas。通过不同的
to_*方法,可以将数据导出出 pandas。head/tail/info方法和dtypes属性对于初步检查非常方便。
有关与 pandas 输入输出的完整概述,请参阅用户指南中关于 读取器和写入器函数 的部分。