从熊猫列中删除可选字符

时间:2020-06-03 05:34:05

标签: python regex pandas

我有一列,其中可能包含诸如abc,defabc,def,efg,ab,12,34,之类的值。如您所见,有些值以,结尾,有些则不t。我想做的就是删除所有以逗号,结尾的值。

假定已加载数据并创建了数据帧。这就是我要做的

df[c] = df[c].astype('unicode').str.replace("/,*$/", '').str.strip()

但是它什么也没做。

我在做什么错了?

2 个答案:

答案 0 :(得分:2)

您尝试执行此操作的方式如下:

df[c] = df[c].str.rstrip(',')

rstrip(',')将从字符串的末尾删除逗号。

strip(',')将从开始位置和结束位置将其删除。

以上内容将替换文字。它不会让您从数据框中删除行。因此,您应该执行以下操作:

使用 str.endswith

df[~df['col'].str.endswith(',')]

考虑df以下:

In [1547]: df
Out[1547]: 
         date id  value  rolling_mean   col
0  2016-08-28  A      1           nan    a,
1  2016-08-28  B      1           nan    b
2  2016-08-29  C      2           nan    c,
3  2016-09-02  B      0          0.50    d
4  2016-09-03  A      3          2.00    ee,ff
5  2016-09-06  C      1          1.50    gg,
6  2017-01-15  B      2          1.00    i,
7  2017-01-18  C      3          2.00    j
8  2017-01-18  A      2          2.50    k,

In [1548]: df = df[~df['col'].str.endswith(',')]    
In [1549]: df                               
Out[1549]: 
         date id  value  rolling_mean    col
1  2016-08-28  B      1           nan      b
3  2016-09-02  B      0          0.50      d
4  2016-09-03  A      3          2.00  ee,ff
7  2017-01-18  C      3          2.00      j

答案 1 :(得分:1)

您的正则表达式是错误的,因为它包含正则表达式分隔符。 Python正则表达式使用纯字符串,而不是正则表达式文字。

使用

df[c] = df[c].astype('unicode').str.replace(",+$", '').str.strip()

,+$将在字符串末尾匹配一个或多个逗号。

请参见proof

另外,请参见Regular expression works on regex101.com, but not on prod