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: 登船港口。

    原始数据

如何读写表格数据?#

../../_images/02_io_readwrite.svg
  • 我想分析泰坦尼克号乘客数据,该数据可作为 CSV 文件提供。

    In [2]: titanic = pd.read_csv("data/titanic.csv")
    

    pandas 提供了 read_csv() 函数,用于将存储为 CSV 文件的数据读取到 pandas DataFrame 中。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 时,不使用括号 ()dtypesDataFrameSeries 的一个属性。 DataFrameSeries 的属性不需要 ()。属性表示 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 个。

    • NameSexCabinEmbarked 列包含文本数据(字符串,也称为 object)。其他列是数值数据,其中一些是整数(integer),另一些是实数(float)。

    • 不同列中数据的类型(字符、整数等)通过列出 dtypes 来进行总结。

    • 还提供了保存 DataFrame 所需的大致 RAM 数量。

请记住

  • 通过 read_* 函数,可以从多种不同的文件格式或数据源获取数据到 pandas。

  • 通过不同的 to_* 方法,可以将数据导出出 pandas。

  • head/tail/info 方法和 dtypes 属性对于初步检查非常方便。

用户指南

有关与 pandas 输入输出的完整概述,请参阅用户指南中关于 读取器和写入器函数 的部分。