Pandas/正则表达式:删除连字符后的字符串或括号字符(包括)携带Pandas Dataframe 中逗号后的字符串

5vf7fwbs  于 2022-12-10  发布在  其他
关注(0)|答案(2)|浏览(124)

我有一个 Dataframe ,其中包含一个列,该列包含多个由逗号分隔的字符串,但在该字符串中,我想删除连字符后面的所有内容(包括连字符),要点是在某些情况下,连字符后面没有连字符,但有定向括号,所以我也想删除它,并携带逗号后面的所有内容,我该怎么做呢?您可以在最后一行看到这种情况。

dd = pd.DataFrame()
dd['sin'] = ['U147(BCM), U35(BCM)','P01-00(ECM), P02-00(ECM)', 'P3-00(ECM), P032-00(ECM)','P034-00(ECM)', 'P23F5(PCM), P04-00(ECM)']

预期产出

dd['sin']
# output 
U147 U35
P01 P02
P3 P032
P034
P23F5 P04

希望在连字符或括号或任何特殊字符之前只携带字符串。

ru9i0ody

ru9i0ody1#

下面的代码似乎重现了您想要的结果:

dd['sin'] = dd['sin'].str.split(", ")
dd = dd.explode('sin').reset_index()
dd['sin'] = dd['sin'].str.replace('\W.*', '', regex=True)

得到dd['sin']为:

0     U147
1      U35
2      P01
3      P02
4       P3
5     P032
6     P034
7    P23F5
8      P04
Name: sin, dtype: object

第二行中对.reset_index()的调用是可选的,具体取决于是否要保留该字符串片段来自的行。

lstz6jyr

lstz6jyr2#

您可以使用以下regex

r"-\d{2}|\([EBP]CM\)|\s"

代码如下:

sin = ['U147(BCM), U35(BCM)','P01-00(ECM), P02-00(ECM)', 'P3-00(ECM), P032-00(ECM)','P034-00(ECM)', 'P23F5(PCM), P04-00(ECM)']

dd = pd.DataFrame()
dd['sin'] = sin
dd['sin'] = dd['sin'].str.replace(r'-\d{2}|\([EBP]CM\)|\s', '', regex=True)
print(dd)

输出:

sin
0   U147,U35
1    P01,P02
2    P3,P032
3       P034
4  P23F5,P04

编辑

或者使用以下行删除逗号:

dd['sin'] = dd['sin'].str.replace(r'-\d{2}|\([EBP]CM\)|\s', '', regex=True).str.replace(',',' ')

输出:

sin
0   U147 U35
1    P01 P02
2    P3 P032
3       P034
4  P23F5 P04

相关问题