In [1]: import pandas as pd
Data used for this tutorial:
  • 本教程使用泰坦尼克号数据集,存储为CSV格式。数据包括以下数据列:

    • PassengerId: 每位乘客的ID。

    • 幸存者:乘客是否幸存的指示。0 表示是,1 表示否。

    • Pclass:三种票等级之一:等级 1、等级 2 和等级 3

    • 名称:乘客的姓名。

    • Sex: 乘客的性别。

    • 年龄:乘客的年龄(岁)。

    • SibSp: 船上的兄弟姐妹或配偶数量。

    • Parch: 父母或孩子在船上的数量。

    • 票:乘客的票号。

    • 票价:指示票价。

    • Cabin: 乘客的舱位号。

    • Embarked: 登船港。

    To raw data

如何读写表格数据?#

../../_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                                               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 时,不使用括号 ()dtypesDataFrameSeries 的一个属性。DataFrameSeries 的属性不需要 ()。属性表示 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个``非空``值。

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

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

    • 用于保存 DataFrame 的 RAM 的大致数量也会提供。

REMEMBER

  • 从许多不同的文件格式或数据源将数据导入到 pandas 中,由 read_* 函数支持。

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

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

To user guide

要全面了解从 pandas 输入和输出的可能性,请参阅用户指南中关于 读取器和写入器函数 的部分。