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 object
Sex object
Age float64
SibSp int64
Parch int64
Ticket object
Fare float64
Cabin object
Embarked object
dtype: object
列出了每列使用的的数据类型。此 DataFrame
中的数据类型包括整数 (int64
)、浮点数 (float64
) 和字符串 (object
)。
注意
在请求 dtypes
时,不使用方括号!dtypes
是 DataFrame
和 Series
的属性。DataFrame
或 Series
的属性不需要方括号。属性代表 DataFrame
/Series
的特征,而方法(需要方括号)则对 DataFrame
/Series
进行操作,如 第一个教程 中介绍的那样。
我的同事要求将泰坦尼克号数据作为电子表格。
In [6]: titanic.to_excel("titanic.xlsx", sheet_name="passengers", index=False)
与用于将数据读入 pandas 的
read_*
函数相反,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.core.frame.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 object 4 Sex 891 non-null object 5 Age 714 non-null float64 6 SibSp 891 non-null int64 7 Parch 891 non-null int64 8 Ticket 891 non-null object 9 Fare 891 non-null float64 10 Cabin 204 non-null object 11 Embarked 889 non-null object dtypes: float64(2), int64(5), object(5) memory usage: 83.7+ KB
方法
info()
提供有关DataFrame
的技术信息,因此让我们更详细地解释输出。它确实是一个
DataFrame
。共有 891 个条目,即 891 行。
每行都有一个行标签(也称为
index
),其值范围为 0 到 890。该表有 12 列。大多数列对每行都有一个值(所有 891 个值都是
non-null
)。有些列确实有缺失值,并且少于 891 个non-null
值。列
Name
、Sex
、Cabin
和Embarked
由文本数据(字符串,也称为object
)组成。其他列是数值数据,其中一些是整数(也称为integer
),而另一些是实数(也称为float
)。不同列中数据类型(字符、整数等)的摘要通过列出
dtypes
来实现。还会提供用于保存 DataFrame 的近似 RAM 使用量。
记住
从许多不同的文件格式或数据源中将数据导入 pandas 受
read_*
函数的支持。从 pandas 导出数据由不同的
to_*
方法提供。head
/tail
/info
方法和dtypes
属性便于首次检查。
有关从 pandas 输入和输出的完整概述,请参阅用户指南中关于 读取器和写入器函数 的部分。