对于某些字符串末尾包含(xyz)和[1]的字符串列,请在Python中删除这些字符
我的df列包括一些字符串,这些字符串在括号中有附加字符,在某些字符串的末尾有方括号,对于这些字符串,我想删除括号、方括号和其中包含的所有字符对于某些字符串末尾包含(xyz)和[1]的字符串列,请在Python中删除这些字符,python,regex,Python,Regex,我的df列包括一些字符串,这些字符串在括号中有附加字符,在某些字符串的末尾有方括号,对于这些字符串,我想删除括号、方括号和其中包含的所有字符 2367 CROSS THREADED 2368 ALL ABOUT ARBY [5]Res. 2369 EMILIA MEL [5]Res. 2360 DYNA REAVER (NSW)[5] 2362 PARTY MIX [5] 清理后的预期结果 2367
2367 CROSS THREADED
2368 ALL ABOUT ARBY [5]Res.
2369 EMILIA MEL [5]Res.
2360 DYNA REAVER (NSW)[5]
2362 PARTY MIX [5]
清理后的预期结果
2367 CROSS THREADED
2368 ALL ABOUT ARBY
2369 EMILIA MEL
2360 DYNA REAVER
2362 PARTY MIX
这有用吗
import re
before = "2369 EMILIA MEL [5]Res."
after = re.sub(r"\[.*", "", before).strip()
print(before)
print(after)
其中打印:
2369 EMILIA MEL [5]Res.
2369 EMILIA MEL
['2369 EMILIA MEL [5]Res.', '2360 DYNA REAVER (NSW)[5]']
['2369 EMILIA MEL', '2360 DYNA REAVER']
before after
0 CROSS THREADED CROSS THREADED
1 ALL ABOUT ARBY [5]Res. ALL ABOUT ARBY
2 EMILIA MEL [5]Res. EMILIA MEL
3 DYNA REAVER (NSW)[5] DYNA REAVER
4 PARTY MIX [5] PARTY MIX
更新 根据您的评论,您希望删除
[
或(
后的所有内容:
import re
before = [
"2369 EMILIA MEL [5]Res.",
"2360 DYNA REAVER (NSW)[5]"
]
after = [re.sub(r"(\(|\[).*", "", b).strip() for b in before]
print(before)
print(after)
其中打印:
2369 EMILIA MEL [5]Res.
2369 EMILIA MEL
['2369 EMILIA MEL [5]Res.', '2360 DYNA REAVER (NSW)[5]']
['2369 EMILIA MEL', '2360 DYNA REAVER']
before after
0 CROSS THREADED CROSS THREADED
1 ALL ABOUT ARBY [5]Res. ALL ABOUT ARBY
2 EMILIA MEL [5]Res. EMILIA MEL
3 DYNA REAVER (NSW)[5] DYNA REAVER
4 PARTY MIX [5] PARTY MIX
更新2 下面是一个如何在
pandas.DataFrame上使用它的示例:
import pandas as pd
import re
df = pd.DataFrame({"before": [
"CROSS THREADED",
"ALL ABOUT ARBY [5]Res.",
"EMILIA MEL [5]Res.",
"DYNA REAVER (NSW)[5]",
"PARTY MIX [5]",
]})
df["after"] = df["before"].apply(
lambda s: re.sub(r"(\(|\[).*", "", s).strip())
print(df)
其中打印:
2369 EMILIA MEL [5]Res.
2369 EMILIA MEL
['2369 EMILIA MEL [5]Res.', '2360 DYNA REAVER (NSW)[5]']
['2369 EMILIA MEL', '2360 DYNA REAVER']
before after
0 CROSS THREADED CROSS THREADED
1 ALL ABOUT ARBY [5]Res. ALL ABOUT ARBY
2 EMILIA MEL [5]Res. EMILIA MEL
3 DYNA REAVER (NSW)[5] DYNA REAVER
4 PARTY MIX [5] PARTY MIX
更新3
正如评论中指出的,您也可以直接使用:
df["after"] = df["before"].str.replace(r"( )*(\(|\[).*", "")
这可能对你有帮助
def trim(string):
string = string.split('(')[0]
string = string.split('[')[0]
return string.strip()
df['CROSS THREADED'] = df['CROSS THREADED'].apply(lambda row: trim(string=row))
以及在[]或()后面的文本,例如在“关于阿比的一切”行中,结尾显然有“Res.”(除非这是某种工件)?是的-基本上所有的内容都是尾随的[或(我想删除。尝试df['col']=df['col'].str.replace(r'\s*(?:\[^][]*].\([^()]*\)\s*$,'')
我需要在数据帧的整列上调用它,那么您建议如何运行它呢?我得到一个TypeError:预期的字符串或字节如下object@Jayjayyy你知道,有一个str.replace,用来替换regex。