In [1]: import pandas as pd
- 泰坦尼克号数据
本教程使用了存储为 CSV 的泰坦尼克号数据集。数据包含以下列
PassengerId: 每位乘客的 ID。
Survived: 表示乘客是否幸存。
0
表示是,1
表示否。Pclass: 3 种票务等级之一:
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)
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.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
)。有些列确实缺少值,且非non-null
值少于 891 个。Name
、Sex
、Cabin
和Embarked
列包含文本数据(字符串,即object
)。其他列是数值数据,其中一些是整数(即integer
),另一些是实数(即float
)。通过列出
dtypes
,可以总结不同列中数据的类型(字符、整数等)。还提供了保存 DataFrame 所需的大致内存量。
记住
read_*
函数支持从多种不同的文件格式或数据源将数据读取到 pandas 中。不同的
to_*
方法提供了将数据从 pandas 导出到不同格式的功能。head
/tail
/info
方法和dtypes
属性方便进行初步检查。
有关从 pandas 输入和输出数据的完整概述,请参阅用户指南中关于 读写函数 的章节。