替换Pandas中的字符串后是否可以减少字符串字符?

2024-07-03 06:29:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的数据帧

    |US3973996|0|0|0|0|US8008573|
|US6162985|0|0|US8309838|US8008573|

然后我用

df_select['pat_num'] = df_select['pat_num'].str.replace('\|+', ',')

df_select['pat_num'] = df_select['pat_num'].str.replace('0', '')

df_select

用于删除“|”和“0”,结果如下所示

  ,US3973996,,,,,US88573,
US6162985,,,US839838,US88573,

但我想看到结果是这样的

,US3973996,US88573,
US6162985,US839838,US88573,

如何将multi,,,,,,减少为single?你知道吗

有什么建议吗?你知道吗


Tags: 数据dfselectmultinumreplacesinglepat
2条回答

在代码的基础上,这里有一个选项可以链接两个replace调用和一个strip调用。你知道吗

df['pat_num'].str.replace('0', '').str.replace(r'\|+', ',').str.strip(',')

0             US3973996,US88573
1    US6162985,US839838,US88573
Name: pat_num, dtype: object

extractall可能会给您带来更好的里程:

df['pat_num'].str.extractall(r'(US\d+)')[0].groupby(level=0).agg(','.join)

0              US3973996,US8008573
1    US6162985,US8309838,US8008573
Name: 0, dtype: object

这和下面的findall选项都使用id的结构“USXXXXXXX”(无论(US\d+)捕获什么)。你知道吗


同样,您也可以使用findall并加入子列表:

df['pat_num'].str.findall(r'(US\d+)').str.join(',')

0              US3973996,US8008573
1    US6162985,US8309838,US8008573
Name: pat_num, dtype: object

另一种方法

df[0].str.split('|').apply(lambda x: ','.join([j for j in x if j and len(j) > 2]))

输出

0              US3973996,US8008573
1    US6162985,US8309838,US8008573
Name: 0, dtype: object

相关问题 更多 >