我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Pandas使用分隔符或正则表达式将字符串拆分为多列

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Pandas使用分隔符或正则表达式将字符串拆分为多列

Pandas如何将带有字符串元素的列拆分为多个列。

使用以下字符串的方法。

  • str.split():用定界符分割
  • str.extract():按正则表达式拆分

字符串方法是pandas.Series方法。

适用于pandas.Series或pandas.DataFrame列

str.split():用定界符分割

要按定界符(delimiter)进行拆分,使用字符串方法str.split()。

pandas.Series

以以下pandas.Series为例。

import pandas as pd

s_org = pd.Series(['aaa@xxx.com', 'bbb@yyy.com', 'ccc@zzz.com', 'ddd'], index=['A', 'B', 'C', 'D'])
print(s_org)
print(type(s_org))
# A    aaa@xxx.com
# B    bbb@yyy.com
# C    ccc@zzz.com
# D            ddd
# dtype: object
# <class 'pandas.core.series.Series'>

将定界符指定为第一个参数。一个pandas.Series元素作为拆分字符串的列表返回。

s = s_org.str.split('@')
print(s)
print(type(s))
# A    [aaa, xxx.com]
# B    [bbb, yyy.com]
# C    [ccc, zzz.com]
# D             [ddd]
# dtype: object
# <class 'pandas.core.series.Series'>

指定split = True作为参数可分为多个列并以pandas.DataFrame的形式获取。默认值为expand = False。

没有足够的行划分的元素为“无(None)”。

df = s_org.str.split('@', expand=True)
print(df)
print(type(df))
#      0        1
# A  aaa  xxx.com
# B  bbb  yyy.com
# C  ccc  zzz.com
# D  ddd     None
# <class 'pandas.core.frame.DataFrame'>

可以在列中指定获取的pandas.DataFrame的列名。

df.columns = ['local', 'domain']
print(df)
#   local   domain
# A   aaa  xxx.com
# B   bbb  yyy.com
# C   ccc  zzz.com
# D   ddd     None

pandas.DataFrame

如果要通过将pandas.DataFrame的特定列拆分为多列来更新它,这会有些乏味。可能有更好的方法。

以先前创建的pandas.DataFrame为例。

print(df)
#   local   domain
# A   aaa  xxx.com
# B   bbb  yyy.com
# C   ccc  zzz.com
# D   ddd     None

在特定的列上使用str.split()获得一个拆分的pandas.DataFrame。

print(df['domain'].str.split('.', expand=True))
#       0     1
# A   xxx   com
# B   yyy   com
# C   zzz   com
# D  None  None

使用pd.concat()与原始pandas.DataFrame进行串联(联接),并使用drop()方法删除原始列。

df2 = pd.concat([df, df['domain'].str.split('.', expand=True)], axis=1).drop('domain', axis=1)
print(df2)
#   local     0     1
# A   aaa   xxx   com
# B   bbb   yyy   com
# C   ccc   zzz   com
# D   ddd  None  None

如果剩余的列很少,则只能选择与pd.concat()串联(联接)时所需的列。

df3 = pd.concat([df['local'], df['domain'].str.split('.', expand=True)], axis=1)
print(df3)
#   local     0     1
# A   aaa   xxx   com
# B   bbb   yyy   com
# C   ccc   zzz   com
# D   ddd  None  None

要重命名特定的列,请使用rename()方法。

df3.rename(columns={0: 'second_LD', 1: 'TLD'}, inplace=True)
print(df3)
#   local second_LD   TLD
# A   aaa       xxx   com
# B   bbb       yyy   com
# C   ccc       zzz   com
# D   ddd      None  None

参考文章

Pandas.DataFrame的行名和列名的修改

str.extract():按正则表达式拆分

使用字符串方法str.extract()分割正则表达式。

以以下pandas.Series为例。

import pandas as pd

s_org = pd.Series(['aaa@xxx.com', 'bbb@yyy.com', 'ccc@zzz.com', 'ddd'], index=['A', 'B', 'C', 'D'])
print(s_org)
# A    aaa@xxx.com
# B    bbb@yyy.com
# C    ccc@zzz.com
# D            ddd
# dtype: object

在第一个参数中指定正则表达式。对于每个与正则表达式中用()括起来的组部分匹配的字符串,均对其进行划分。

提取多个组时,无论参数expand如何,都将返回pandas.DataFrame。

如果不匹配,则为NaN。

df = s_org.str.extract('(.+)@(.+)\.(.+)', expand=True)
print(df)
#      0    1    2
# A  aaa  xxx  com
# B  bbb  yyy  com
# C  ccc  zzz  com
# D  NaN  NaN  NaN

df = s_org.str.extract('(.+)@(.+)\.(.+)', expand=False)
print(df)
#      0    1    2
# A  aaa  xxx  com
# B  bbb  yyy  com
# C  ccc  zzz  com
# D  NaN  NaN  NaN

如果只有一组,则当参数expand = True时返回pandas.DataFrame,如果expand = False则返回pandas.Series。

df_single = s_org.str.extract('(\w+)', expand=True)
print(df_single)
print(type(df_single))
#      0
# A  aaa
# B  bbb
# C  ccc
# D  ddd
# <class 'pandas.core.frame.DataFrame'>

s = s_org.str.extract('(\w+)', expand=False)
print(s)
print(type(s))
# A    aaa
# B    bbb
# C    ccc
# D    ddd
# dtype: object
# <class 'pandas.core.series.Series'>

Expand = False是当前版本0.22.0中的默认值,但expand = True将是将来的默认值。

FutureWarning: currently extract(expand=None) means expand=False (return Index/Series/DataFrame) 
but in a future version of pandas this will be changed to expand=True (return DataFrame)

如果对正则表达式模式使用命名组(?P …),则该名称将按原样是列名。

df_name = s_org.str.extract('(?P<local>.*)@(?P<second_LD>.*)\.(?P<TLD>.*)', expand=True)
print(df_name)
#   local second_LD  TLD
# A   aaa       xxx  com
# B   bbb       yyy  com
# C   ccc       zzz  com
# D   NaN       NaN  NaN

如果要通过将pandas.DataFrame的特定列划分为多个列来进行更新,请参考上面的str.split()示例。使用pd.concat()连接(联接)原始的pandas.DataFrame并使用drop()方法删除原始的列。

到此这篇关于Pandas使用分隔符或正则表达式将字符串拆分为多列的文章就介绍到这了,更多相关Pandas 字符串拆分为多列内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Pandas使用分隔符或正则表达式将字符串拆分为多列

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Pandas使用分隔符或正则表达式将字符串拆分为多列

本文主要介绍了Pandas使用分隔符或正则表达式将字符串拆分为多列,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-02-22

Pandas怎么使用分隔符或正则表达式将字符串拆分为多列

这篇“Pandas怎么使用分隔符或正则表达式将字符串拆分为多列”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Pandas怎么
2023-07-05

Python字符串怎么使用多个分隔符分割成列表

本篇内容介绍了“Python字符串怎么使用多个分隔符分割成列表”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Python 的字符串默认是有一
2023-07-05

Python 字符串使用多个分隔符分割成列表的2种方法

本文主要介绍了Python 字符串使用多个分隔符分割成列表,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-14

使用正则表达式将字符串的首字母由小写转换为大写

本篇文章给大家分享《使用正则表达式将字符串的首字母由小写转换为大写》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更
使用正则表达式将字符串的首字母由小写转换为大写
2024-04-04

PHP中的preg_split()函数:如何使用正则表达式分割字符串

PHP中的preg_split()函数:如何使用正则表达式分割字符串在PHP编程中,有时我们需要根据一定的规则来分割字符串,并将分割后的部分存储到一个数组中。PHP提供了一个非常强大的函数preg_split(),它使用正则表达式来实现字符
PHP中的preg_split()函数:如何使用正则表达式分割字符串
2023-11-03

如何使用C#中的Regex.MatchCollection函数获取字符串中所有符合正则表达式的部分

如何使用C#中的Regex.MatchCollection函数获取字符串中所有符合正则表达式的部分,需要具体代码示例正则表达式是一种强大的模式匹配工具,在C#中,可以使用Regex.MatchCollection函数来获取字符串中所有符合正
如何使用C#中的Regex.MatchCollection函数获取字符串中所有符合正则表达式的部分
2023-11-18

PHP中的preg_match_all()函数:如何使用正则表达式匹配多个字符串

PHP中的preg_match_all()函数:如何使用正则表达式匹配多个字符串,需要具体代码示例正则表达式是一种用来描述文本模式的工具,能够用来匹配、搜索或替换文本中符合某种模式的字符串。PHP中的preg_match_all()函数是一
PHP中的preg_match_all()函数:如何使用正则表达式匹配多个字符串
2023-11-04

PHP Linux脚本开发经验分享:利用正则表达式进行字符串处理

在Linux环境下使用PHP脚本进行开发是一种常见的方式。而在脚本的开发过程中,字符串处理往往是一个非常重要的部分。而正则表达式作为一种强大的字符串匹配工具,能够帮助我们更高效地进行字符串处理。本文将分享一些在Linux环境下使用PHP脚本
2023-10-21

怎么用正则表达式替换字符串并保留其中部分任意内容

这篇“怎么用正则表达式替换字符串并保留其中部分任意内容”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么用正则表达式替换字符
2023-07-06

PHP如何返回预定义多字节字符串的多字节正则表达式的匹配部分的位置和长度

PHP提供了mb_ereg_search_getpos()和mb_ereg_matches()函数,用于获取预定义多字节字符串中多字节正则表达式匹配部分的位置和长度。这些函数对于在多字节字符编码环境中进行正则表达式操作非常有用。
PHP如何返回预定义多字节字符串的多字节正则表达式的匹配部分的位置和长度
2024-04-02

Java如何返回预定义多字节字符串的多字节正则表达式的匹配部分的位置和长度

Java正则表达式获取多字节字符串匹配部分的位置和长度:创建Pattern对象:Patternpattern=Pattern.compile(regex)创建Matcher对象:Matchermatcher=pattern.matcher(input)查找匹配:booleanfound=matcher.find()获取匹配位置和长度:intstart=matcher.start():匹配部分的起始索引(字节偏移)intend=matcher.end():匹配部分的结束索引(字节偏移)intlength=e
Java如何返回预定义多字节字符串的多字节正则表达式的匹配部分的位置和长度
2024-04-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录