如何用Pandas正则分割字符串成多列?

2026-04-20 00:551阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1307个文字,预计阅读时间需要6分钟。

如何用Pandas正则分割字符串成多列?

目录:str.split()方法

使用str.split()方法:将带有字符串元素的列为多个列使用以下字符串的方法进行:str.split():使用定界符分割字符串

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

    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

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

    如何用Pandas正则分割字符串成多列?

    提取多个组时,无论参数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 字符串拆分为多列内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

    本文共计1307个文字,预计阅读时间需要6分钟。

    如何用Pandas正则分割字符串成多列?

    目录:str.split()方法

    使用str.split()方法:将带有字符串元素的列为多个列使用以下字符串的方法进行:str.split():使用定界符分割字符串

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

      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

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

      如何用Pandas正则分割字符串成多列?

      提取多个组时,无论参数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 字符串拆分为多列内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!