In [1]: import pandas as pd
- Titanic data
本教程使用泰坦尼克号数据集,存储为CSV格式。数据包括以下数据列:
PassengerId: 每位乘客的ID。
幸存者:乘客是否幸存的指示。
0
表示是,1
表示否。Pclass:三种票等级之一:等级
1
、等级2
和等级3
。名称:乘客的姓名。
Sex: 乘客的性别。
年龄:乘客的年龄(岁)。
SibSp: 船上的兄弟姐妹或配偶数量。
Parch: 父母或孩子在船上的数量。
票:乘客的票号。
票价:指示票价。
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 Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S
.. ... ... ... ... ... ... ... ... ... ... ... ...
886 887 0 2 Montvila, Rev. Juozas male 27.0 0 0 211536 13.0000 NaN S
887 888 1 1 Graham, Miss Margaret Edith female 19.0 0 0 112053 30.0000 B42 S
888 889 0 3 Johnston, Miss Catherine Helen "Carrie" female NaN 1 2 W./C. 6607 23.4500 NaN S
889 890 1 1 Behr, Mr. Karl Howell male 26.0 0 0 111369 30.0000 C148 C
890 891 0 3 Dooley, Mr. Patrick male 32.0 0 0 370376 7.7500 NaN Q
[891 rows x 12 columns]
我想查看一个 pandas DataFrame 的前 8 行。
In [4]: titanic.head(8) Out[4]: PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked 0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S 1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C 2 3 1 3 Heikkinen, Miss Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S 3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S 4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S 5 6 0 3 Moran, Mr. James male NaN 0 0 330877 8.4583 NaN Q 6 7 0 1 McCarthy, Mr. Timothy J male 54.0 0 0 17463 51.8625 E46 S 7 8 0 3 Palsson, Master Gosta Leonard male 2.0 3 1 349909 21.0750 NaN S
要查看
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
进行操作,如在 第一个教程 中所介绍的那样。
我的同事请求了泰坦尼克号数据作为电子表格。
备注
如果你想使用
to_excel()
和read_excel()
,你需要安装一个 Excel 阅读器,如安装文档的 Excel 文件 部分所述。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 Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S
我对
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 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个值都是``非空``)。有些列确实有缺失值,少于891个``非空``值。
列
Name
、Sex
、Cabin
和Embarked
包含文本数据(字符串,即object
)。其他列是数值数据,其中一些是整数(integer
),另一些是实数(float
)。不同列中的数据类型(字符、整数等)通过列出
dtypes
来总结。用于保存 DataFrame 的 RAM 的大致数量也会提供。
REMEMBER
从许多不同的文件格式或数据源将数据导入到 pandas 中,由
read_*
函数支持。通过不同的
to_*
方法,可以将数据从 pandas 中导出。head
/tail
/info
方法和dtypes
属性对于初步检查非常方便。
要全面了解从 pandas 输入和输出的可能性,请参阅用户指南中关于 读取器和写入器函数 的部分。