文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-07-05 05:04

关注

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

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

适用于pandas.Series或pandas.DataFrame列

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

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

pandas.Series

以以下pandas.Series为例。

import pandas as pds_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 pds_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  NaNdf = 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 &hellip;),则该名称将按原样是列名。

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怎么使用分隔符或正则表达式将字符串拆分为多列”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

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

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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯