替换熊猫中的字符串后,可以减少字符串字符吗?

时间:2019-06-28 03:36:55

标签: python pandas

我有一个这样的数据框

    |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,

如何将多(,)减少为一个?

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

在您的代码的基础上,这是一个选项,可链接两个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

答案 1 :(得分:0)

另一种方法

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