前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >单列文本拆分为多列,Python可以自动化

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

作者头像
fanjy
发布2022-04-13 13:57:57
6.9K0
发布2022-04-13 13:57:57
举报
文章被收录于专栏:完美Excel完美Excel

标签:Python与Excel,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]

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档