简体   繁体   English

删除熊猫列中多个符号后的所有内容

[英]Remove everything after multiple symbols within a column in pandas

I have a dataframe such as我有一个数据框,例如

COL1 COL2
A    Name=canis_lupus3099 HHYUIO jj6§è7
B    Name=bomba009 JJIJJ;HHJKN
C    Name=Test_test788_eheh;NHHhh
D    Name=UYEYEHJ0909EEHH:HEEH Jk G

How can I use regex in order to only keep within COL2 the Name=something part and remove everything after a space of any symbolic point (eg ; or :)我如何使用正则表达式以便仅将 Name=something 部分保留在 COL2 中,并在任何符号点的空格之后删除所有内容(例如 ; 或 :)

I should then get:然后我应该得到:

COL1 COL2
A    Name=canis_lupus3099
B    Name=bomba009
C    Name=Test_test788_eheh
D    Name=UYEYEHJ0909EEHH

I touth to use something like tab['COL2'].str.replace()我倾向于使用tab['COL2'].str.replace()

You can use str.extract :您可以使用str.extract

df['COL2'] = df['COL2'].str.extract(r'^(Name=(?:[^\s;:])+)')

Alternative:选择:

# everything until the first space or ; or :
df['COL2'] = df['COL2'].str.extract(r'^(.*?)(?=[\s;:])')

output:输出:

  COL1                    COL2
0    A    Name=canis_lupus3099
1    B           Name=bomba009
2    C  Name=Test_test788_eheh
3    D    Name=UYEYEHJ0909EEHH

Try split:尝试拆分:

df[['COL2','COL3']] = df['COL2'].str.split(" ", 1, expand=True)

after that you can delete COL3之后你可以删除 COL3

def remove(df, col, symbol):
    df[col] = df[col].str.replace(symbol, '')
    return df

You can use str.extract with \w+ :您可以将str.extract\w+一起使用:

  1. ^ - start of string ^ - 字符串的开头
  2. \w+ - More that one letters/digits/underscores \w+ - 多于一个字母/数字/下划线
>>> df['COL2'].str.extract(r'^(Name=\w+)')
1   Name=canis_lupus3099
2   Name=bomba009
3   Name=Test_test788_eheh
4   Name=UYEYEHJ0909EEHH

一个出路是使用正向查找来提取开始后的所有字符。

df['COL2'].str.strip().str.extract('((?<=^)Name=\w+)')

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM