如何读取和写入表格数据
来源:Pandas官网:https://pandas.pydata.org/docs/getting_started/intro_tutorials/index.html
文章目录
- 如何读取和写入表格数据
- 导包
- 【1】如何读取和写入表格数据
- 【2】小结
导包
import pandas as pd
数据介绍:
使用存储为 CSV 的泰坦尼克号数据集。数据由以下数据列组成:
- 【PassengerId】乘客 ID:每位乘客的 ID。
- 【Survived】幸存:表明乘客是否幸存。0 表示是,1 表示否。
- 【Pclass】P类:3个机票类别之一:1类,2类和3类.
- 【Name】姓名:乘客姓名。
- 【Sex】性别:乘客的性别。
- 【Age】年龄:乘客的年龄(以岁为单位)。
- SibSp:船上的兄弟姐妹或配偶的数量。
- Parch:船上的父母或孩子人数。
- 【Ticket】票:乘客的票号。
- 【Fare】票价:表示票价。
- 【Cabin】客舱:乘客的客舱号码。
- 【Embarked】登船:登船港。
【1】如何读取和写入表格数据
我想分析泰坦尼克号乘客数据,以CSV文件的形式提供。
titanic = pd.read_csv("titanic.csv")
pandas 提供 read_csv() 函数,用于将存储为 CSV 文件的数据读取到 pandas DataFrame中。Pandas 支持许多不同的文件格式或开箱即用的数据源(CSV、EXCEL、SQL、JSON、PARQUET 等),每种格式都带有前缀 read_*.
确保在读取数据后始终检查数据。显示DataFrame时,默认情况下将显示第一行和后 5 行:
titanic
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 × 12 columns
我想查看pandas DataFrame的前 8 行。
titanic.head(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 |
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() 方法和所需的行数
对最后 N 行感兴趣?Pandas 也提供了一个 tail() 方法。例如,titanic.tail(10) 将返回数据帧的最后 10 行。
titanic.tail(10)
PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
881 | 882 | 0 | 3 | Markun, Mr. Johann | male | 33.0 | 0 | 0 | 349257 | 7.8958 | NaN | S |
882 | 883 | 0 | 3 | Dahlberg, Miss. Gerda Ulrika | female | 22.0 | 0 | 0 | 7552 | 10.5167 | NaN | S |
883 | 884 | 0 | 2 | Banfield, Mr. Frederick James | male | 28.0 | 0 | 0 | C.A./SOTON 34068 | 10.5000 | NaN | S |
884 | 885 | 0 | 3 | Sutehall, Mr. Henry Jr | male | 25.0 | 0 | 0 | SOTON/OQ 392076 | 7.0500 | NaN | S |
885 | 886 | 0 | 3 | Rice, Mrs. William (Margaret Norton) | female | 39.0 | 0 | 5 | 382652 | 29.1250 | NaN | Q |
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 |
通过请求 pandas dtypes 属性可以检查 pandas 如何解释每个列数据类型:
titanic.dtypes
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的属性不需要括号。属性表示数据帧/系列的特征,而方法(需要括号)对SeriesDataFrameDataFrame/Series执行某些操作
我的同事要求将泰坦尼克号的数据作为电子表格。
titanic.to_excel('titanic.xlsx', sheet_name="passengers", index=False)
read_** 函数用于向 pandas 读取数据,to_* 方法用于存储数据。to_excel() 方法将数据存储为 excel 文件。在此示例中,sheet_name被命名为乘客,而不是默认的 Sheet1。通过设置 index=False,行索引标签不会保存在电子表格中。
等效的读取函数 read_excel() 会将数据重新加载到DataFrame:
titanic = pd.read_excel("titanic.xlsx", sheet_name="passengers")
titanic.head()
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的信息摘要感兴趣
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 进行汇总.
还提供了用于保存数据帧的大致 RAM 量。
【2】小结
read_* 函数支持从许多不同的文件格式或数据源将数据传入 pandas。
从pandas中导出数据由不同的to_*方法提供。
head/tail/info 方法和 dtypes 属性便于第一次检查。