Data used for this tutorial:
  • 本教程使用泰坦尼克号数据集,它以 CSV 格式存储。该数据包含以下数据列:

    • PassengerId:每位乘客的 ID。

    • Survived:乘客是否存活的指示。0 表示生存,1 表示死亡。

    • Pclass:3 个票务等级之一:1 等、2 等和 3 等。

    • Name:乘客姓名。

    • Sex:乘客性别。

    • Age:乘客年龄(以年为单位)。

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

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

    • Ticket:乘客的票号。

    • Fare:指示票价。

    • Cabin:乘客的客舱号。

    • Embarked:登船港口。

    To raw data

如何处理文本数据#

  • 将所有名字字符转换为小写。

    要将 Name 列中的每个字符串转换为小写,请选择 Name 列(参见 tutorial on selection of data ),添加 str 访问器并应用 lower 方法。这样,每个字符串都会被逐元素转换。

time series tutorial 中的 datetime 对象拥有 dt 访问器类似,使用 str 访问器时,也有许多专门的字符串方法可用。这些方法通常名称与等效的内置单个元素字符串方法匹配,但它们是逐元素应用的(还记得 element-wise calculations 吗?),作用于列中的每个值。

  • 创建一个新列 Surname,通过提取逗号前的部分来包含乘客的姓氏。

    使用 Series.str.split() 方法,每个值都会被返回为一个包含 2 个元素的列表。第一个元素是逗号前的部分,第二个元素是逗号后的部分。

    由于我们只对代表姓氏的第一部分(元素 0)感兴趣,所以我们可以再次使用 str 访问器并应用 Series.str.get() 来提取相关部分。确实,这些字符串函数可以级联起来以一次性组合多个函数!

To user guide

更多关于提取字符串部分的信息,请参见用户指南中关于 splitting and replacing strings 的部分。

  • 提取泰坦尼克号上女伯爵的乘客数据。

    (对她的故事感兴趣?请参见 Wikipedia )

    字符串方法 Series.str.contains() 检查列 Name 中的每个值是否包含单词 Countess,并为每个值返回 True``(``Countess 是名称的一部分)或 False``(``Countess 不是名称的一部分)。此输出可用于使用 subsetting of data tutorial 中介绍的条件(布尔)索引来子选择数据。由于泰坦尼克号上只有一位女伯爵,因此我们得到一行结果。

备注

支持更强大的字符串提取,因为 Series.str.contains()Series.str.extract() 方法接受 regular expressions ,但这超出了本教程的范围。

To user guide

有关提取字符串部分的信息,请参阅用户指南中的 string matching and extracting 部分。

  • 泰坦尼克号上的哪个乘客名字最长?

    要获得最长的名字,我们首先需要获取 Name 列中每个名字的长度。通过使用 pandas 字符串方法,Series.str.len() 函数会应用于每个名字(逐个元素)。

    接下来,我们需要获取表中名字长度最大的对应位置,最好是索引标签。idxmax() 方法正好能做到这一点。它不是一个字符串方法,而是应用于整数,因此不使用 str

    根据行的索引名称(307)和列(Name),我们可以使用 tutorial on subsetting 中介绍的 loc 运算符进行选择。

  • 在 “Sex” 列中,将 “male” 的值替换为 “M”,将 “female” 的值替换为 “F”。

    虽然 replace() 不是一个字符串方法,但它提供了一种便捷的方式来使用映射或词汇表来翻译某些值。它需要一个 dictionary 来定义映射 {from : to}

警告

还有一个 replace() 方法可用于替换特定字符集。但是,当有一个包含多个值的映射时,这会变成:

titanic["Sex_short"] = titanic["Sex"].str.replace("female", "F")
titanic["Sex_short"] = titanic["Sex_short"].str.replace("male", "M")

这将变得很麻烦,并且很容易出错。只需考虑(或自己尝试)这两个语句顺序相反时会发生什么……

REMEMBER

  • 字符串方法可通过 str 访问器使用。

  • 字符串方法是逐个元素工作的,可用于条件索引。

  • replace 方法是一种根据给定字典转换值的便捷方法。

To user guide

用户指南页面 working with text data 提供了完整概述。