迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

在 Pandas DataFrame 列中将单列拆分为多列

作者:迹忆客 最近更新:2023/03/21 浏览次数:

Pandas 有一种众所周知的方法,可以通过列表的破折号、空格和返回列(Series)来拆分字符串列或文本列;如果我们谈论 pandas,术语 Series 被称为 Dataframe 列。

我们可以使用 pandas Series.str.split() 函数将字符串拆分为围绕给定分隔符或定界符的多列。它类似于 Python 字符串 split() 方法,但适用于整个 Dataframe 列。我们有最简单的方法来分隔下面的列。

此方法将 Series 字符串与初始索引分开。

Series.str.split(pat=None, n=-1, expand=False)

让我们尝试了解此方法的工作原理

# import Pandas as pd
import pandas as pd

# innitilize Dataframe
df = pd.DataFrame({'Email': ['Alex.jhon@gmail.com', 'Hamza.Azeez@gmail.com', 'Harry.barton@hotmail.com'],
				   'Number':['+44-3844556210', '+44-2245551219', 
                              '+44-1049956215'],
				   'Location':['Alameda,California','Sanford,Florida',
                		'Columbus,Georgia']})				
print("Dataframe series:\n",df)

我们创建了一个 Dataframe df,包含三列,EmailNumberLocation。请注意,电子邮件列中的字符串具有特定的模式。但是,如果你仔细观察,可以将此列拆分为两列。我们将很好地解决所需的问题。

输出:

Dataframe series :
                       Email          Number            Location
0       Alex.jhon@gmail.com  +44-3844556210  Alameda,California
1     Hamza.Azeez@gmail.com  +44-2245551219     Sanford,Florida
2  Harry.barton@hotmail.com  +44-1049956215    Columbus,Georgia

我们将使用 Series.str.split() 函数来分隔 Number 列并在 split() 方法中传递 -。确保将 True 传递给 expand 关键字。

示例 1:

print("\n\nSplit 'Number' column by '-' into two individual columns :\n",
df.Number.str.split(pat='-',expand=True))

这个例子将用 - 分割系列(数字)的每个值。

输出:

Split 'Number' column into two individual columns :
      0           1
0  +44  3844556210
1  +44  2245551219
2  +44  1049956215

如果我们只使用扩展参数 Series.str.split(expand=True),这将允许拆分空格,但不能用 -, 或字符串中存在的任何正则表达式进行分隔,你必须通过 pat 参数。

让我们重命名这些拆分列。

df[['Dialling Code','Cell-Number']]=df.Number.str.split('-',expand=True)
print(df)

我们创建了两个新系列 Dialling codeCell-Number 并使用 Number 系列分配值。

输出:

                      Email          Number            Location Dialling Code  \
0       Alex.jhon@gmail.com  +44-3844556210  Alameda,California           +44   
1     Hamza.Azeez@gmail.com  +44-2245551219     Sanford,Florida           +44   
2  Harry.barton@hotmail.com  +44-1049956215    Columbus,Georgia           +44   

  Cell-Number  
0  3844556210  
1  2245551219  
2  1049956215  

示例 2:

在这个例子中,我们将用 , 分割 Location 系列。

df[['City','State']]=df.Location.str.split(',',expand=True)
print(df)

拆分 Location 系列并将其值存储在单独的系列 CityState 中。

输出:

                      Email          Number            Location      City  \
0       Alex.jhon@gmail.com  +44-3844556210  Alameda,California   Alameda   
1     Hamza.Azeez@gmail.com  +44-2245551219     Sanford,Florida   Sanford   
2  Harry.barton@hotmail.com  +44-1049956215    Columbus,Georgia  Columbus   

        State  
0  California  
1     Florida  
2     Georgia 

让我们看看最后一个例子。我们将在 Email 系列中分隔全名。

full_name=df.Email.str.split(pat='@',expand=True)
print(full_name)

输出:

              0            1
0     Alex.jhon    gmail.com
1   Hamza.Azeez    gmail.com
2  Harry.barton  hotmail.com

现在我们用 . 分隔名字和姓氏。

df[['First Name','Last Name']]=full_name[0].str.split('.',expand=True)
print(df)

输出:

                      Email          Number            Location First Name  \
0       Alex.jhon@gmail.com  +44-3844556210  Alameda,California       Alex   
1     Hamza.Azeez@gmail.com  +44-2245551219     Sanford,Florida      Hamza   
2  Harry.barton@hotmail.com  +44-1049956215    Columbus,Georgia      Harry   

  Last Name  
0      jhon  
1     Azeez  
2    barton 

如果在 .split() 方法中传递了 expand=Truen=-1 参数将不起作用。

print(df['Email'].str.split('@',n=-1, expand=True))

输出:

        0           1
0  George  Washington
1   Hamza       Azeez
2   Harry      Walker

整个示例代码如下。

# import Pandas as pd
import pandas as pd

# create a new Dataframe
df = pd.DataFrame({'Email': ['Alex.jhon@gmail.com', 'Hamza.Azeez@gmail.com', 'Harry.barton@hotmail.com'],
				'Number':['+44-3844556210', '+44-2245551219', '+44-1049956215'],
				'Location':['Alameda,California','Sanford,Florida','Columbus,Georgia']})

print("Dataframe series :\n",df)

print("\n\nSplit 'Number' column by '-' into two individual columns :\n",
								df.Number.str.split(pat='-',expand=True))

df[['Dialling Code','Cell-Number']]=df.Number.str.split('-',expand=True)
print(df)

df[['City','State']]=df.Location.str.split(',',expand=True)
print(df)

full_name=df.Email.str.split(pat='@',expand=True)
print(full_name)

df[['First Name','Last Name']]=full_name[0].str.split('.',expand=True)
print(df)

输出:

Dataframe series :
                       Email          Number            Location
0       Alex.jhon@gmail.com  +44-3844556210  Alameda,California
1     Hamza.Azeez@gmail.com  +44-2245551219     Sanford,Florida
2  Harry.barton@hotmail.com  +44-1049956215    Columbus,Georgia


Split 'Number' column by '-' into two individual columns :
      0           1
0  +44  3844556210
1  +44  2245551219
2  +44  1049956215
                      Email          Number            Location Dialling Code  \
0       Alex.jhon@gmail.com  +44-3844556210  Alameda,California           +44   
1     Hamza.Azeez@gmail.com  +44-2245551219     Sanford,Florida           +44   
2  Harry.barton@hotmail.com  +44-1049956215    Columbus,Georgia           +44   

  Cell-Number  
0  3844556210  
1  2245551219  
2  1049956215  
                      Email          Number            Location Dialling Code  \
0       Alex.jhon@gmail.com  +44-3844556210  Alameda,California           +44   
1     Hamza.Azeez@gmail.com  +44-2245551219     Sanford,Florida           +44   
2  Harry.barton@hotmail.com  +44-1049956215    Columbus,Georgia           +44   

  Cell-Number      City       State  
0  3844556210   Alameda  California  
1  2245551219   Sanford     Florida  
2  1049956215  Columbus     Georgia  
              0            1
0     Alex.jhon    gmail.com
1   Hamza.Azeez    gmail.com
2  Harry.barton  hotmail.com
                      Email          Number            Location Dialling Code  \
0       Alex.jhon@gmail.com  +44-3844556210  Alameda,California           +44   
1     Hamza.Azeez@gmail.com  +44-2245551219     Sanford,Florida           +44   
2  Harry.barton@hotmail.com  +44-1049956215    Columbus,Georgia           +44   

  Cell-Number      City       State First Name Last Name  
0  3844556210   Alameda  California       Alex      jhon  
1  2245551219   Sanford     Florida      Hamza     Azeez  
2  1049956215  Columbus     Georgia      Harry    barton 

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Django 中的 Slug

发布时间:2023/05/04 浏览次数:173 分类:Python

本篇文章旨在定义一个 slug 以及我们如何使用 slug 字段在 Python 中使用 Django 获得独特的帖子。

Django ALLOWED_HOSTS 介绍

发布时间:2023/05/04 浏览次数:181 分类:Python

本文展示了如何创建您的 Django 网站,为公开发布做好准备,如何设置 ALLOWED_HOSTS 以及如何在使用 Django 进行 Web 部署期间修复预期的主要问题。

Django 中的 Select_related 方法

发布时间:2023/05/04 浏览次数:129 分类:Python

本文介绍了什么是查询集,如何处理这些查询以及我们如何利用 select_related() 方法来过滤 Django 中相关模型的查询。

在 Django 中上传媒体文件

发布时间:2023/05/04 浏览次数:198 分类:Python

在本文中,我们简要介绍了媒体文件以及如何在 Django 项目中操作媒体文件。

Django 返回 JSON

发布时间:2023/05/04 浏览次数:106 分类:Python

在与我们的讨论中,我们简要介绍了 JSON 格式,并讨论了如何借助 Django 中的 JsonResponse 类将数据返回为 JSON 格式。

在 Django 中创建对象

发布时间:2023/05/04 浏览次数:59 分类:Python

本文的目的是解释什么是模型以及如何使用 create() 方法创建对象,并了解如何在 Django 中使用 save() 方法。

在 Django 中为多项选择创建字段

发布时间:2023/05/04 浏览次数:75 分类:Python

在本文中,我们将着眼于为多项选择创建一个字段,并向您展示如何允许用户在 Django 中进行多项选择。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便