分享

单列文本拆分为多列,Python可以自动化

 hercules028 2022-03-24

excelperfect

标签:PythonExcel,pandas

Excel中,我们经常会遇到要将文本拆分。Excel中的文本拆分为列,可以使用公式、“分列”功能或Power Query来实现。

图片

1

然而,这三种方法都有点低效,需要手动输入。为了自动化这些手工操作,本文将展示如何在Python数据框架中将文本拆分为列。

准备用于演示的数据框架

这里将使用一个简单的示例,你可以到知识星球完美Excel社群下载Excel示例文件或者自己按照下图所示创建一个Excel文件,以方便进行后续操作。示例文件包含两列,一个人的姓名和出生日期。

图片

2

我们的任务如下:

1.把名字和姓氏分开

2.将出生日期拆分为年、月和日

让我们将数据加载到Python中。在这里,我特意将“出生日期”列中的类型强制为字符串,以便展示切片方法。实际上,pandas应该自动检测此列可能是datetime,并为其分配datetime对象,这使得处理日期数据更加容易。

import pandas as pd

df = pd.read_excel('D:\split_text.xlsx',dtype={'姓名':str, '出生日期':str})

图片

3

不使用循环,而是使用矢量化操作

对于了解Excel并且倾向于使用公式来解决此问题的人,第一反应可能是:好的,我将创建一个可能包含FIND函数和LEFT函数或MID函数等的公式,然后向下拖动以将其应用于所有单元格。虽然在Excel中这样做是可以的,但在Python中这样做从来都不是正确的。上述操作:创建一个公式然后下拉,对于编程语言来说,被称为“循环”。当我们使用pandas来处理数据时,我们不会使用循环,相反,我们使用矢量化操作来实现快速处理。

矢量化操作(在表面上)相当于Excel的“分列”按钮或Power Query的“拆分列”,我们在其中选择一列并对整个列执行某些操作。在Python中,矢量化操作是处理数据的标准方法,因为它比循环快数百倍。后续我们会讨论为什么它要快得多。

一旦我们将Excel表加载到pandas中,整个表将成为pandas数据框架,“出生日期”列将成为pandas系列。因为我们不能循环,所以需要一种方法来访问该系列中的字符串元素。这就是.str出现的地方。它基本上允许访问序列中的字符串元素,因此我们可以对列执行常规String方法。

Python字符串切片

让我们首先处理日期,因为它们看起来间隔相等,应该更容易。我们可以使用Python字符串切片来获取年、月和日。字符串本质上类似于元组,我们可以对字符串使用相同的列表切片技术。看看下面的例子。

图片

4

要在数据框架的列上使用此切片方法,我们可以执行以下操作:

图片

5

字符串.split()方法

.split()方法允许根据给定的分隔符将文本拆分为多个部分。看一个例子:

图片

6

上面的示例使用逗号作为分隔符,将字符串拆分为两个单词。从技术上讲,我们可以使用字符作为分隔符。注意:返回结果是两个单词(字符串)的列表。

那么,如何将其应用于数据框架列?你可能已经明白了,我们使用.str!让我们在“姓名”列中尝试一下,以获得名字和姓氏。

图片

7

拆分是成功的,但是当我们检查数据类型时,它似乎是一个pandas系列,每行是包含两个单词的列表。我们想要的是将文本分成两列(pandas系列),需要用到split()方法的一个可选参数:expand。当将其设置为True时,可以将拆分的项目返回到不同的列中。

图片

8

正如预期的那样,由于存在多个列(系列),因此返回的结果实际上是一个数据框架。现在,我们可以轻松地将文本拆分为不同的列:

df['名字'] = df['姓名'].str.split(',',expand=True)[1]

df['姓氏'] = df['姓名'].str.split(',',expand=True)[0]

注:本文学习整理自pythoninoffice.com

欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。

欢迎到知识星球:完美Excel社群,进行技术交流和提问,获取更多电子资料,并通过社群加入专门的微信讨论群,更方便交流。

完美Excel视频号:

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多