【问题标题】:Extracting a partial string match up until a specific character within a column提取部分字符串匹配,直到列中的特定字符
【发布时间】:2020-02-24 03:03:27
【问题描述】:

我想从一列的行中提取与部分字符串匹配的字符串,直到遇到特定字符。

我想要 column_3 中所有以“String_”开头的字符串,直到“;”字符。

DF 包含如下内容:

Column_1    column_2    column_3 
A           B           X;A;B;String_123;C
Y           L           Y;Q;S;D;F;String_463;F;L;U
P           Q           K;E;TX;String_103;1;1;D;F

我想要的只是这些值:

String_123
String_463
String_103

【问题讨论】:

  • String_... 是否总是在 2 ; 之后发生?
  • 不,“;”的数量可以在每一行中有所不同。

标签: python pandas dataframe slice


【解决方案1】:

运行:

df.column_3.str.extract(r'(?P<Str>String_[^;]+)')

extract 方法匹配一个捕获组。 为了识别,我给这个组起了名字,它将是输出列的名称。

使用的正则表达式首先匹配“String_”,然后匹配一个非空序列 “;”以外的字符。

【讨论】:

    【解决方案2】:

    您可以使用正则表达式来提取此信息。正则表达式将匹配字符串“String_”,然后懒惰地匹配 0 个或多个字符,直到它看到第一个逗号

    data_str = """Column_1    column_2    column_3 
    A           B           X;A;B;String_123;C
    Y           L           Y;Q;S;D;F;String_463;F;L;U
    P           Q           K;E;TX;String_103;1;1;D;F"""
    
    data = [line.split() for line in data_str.splitlines()]
    import pandas as pd
    df = pd.DataFrame(data[1:], columns=data[0])
    print(df['column_3'].str.extract(r'(String_.*?);'))
    

    输出

                0
    0  String_123
    1  String_463
    2  String_103
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-15
      • 2013-12-12
      相关资源
      最近更新 更多