我有一列,其中可能包含诸如abc,def
或abc,def,efg,
或ab,12,34,
之类的值。如您所见,有些值以,
结尾,有些则不t。我想做的就是删除所有以逗号,
结尾的值。
假定已加载数据并创建了数据帧。这就是我要做的
df[c] = df[c].astype('unicode').str.replace("/,*$/", '').str.strip()
但是它什么也没做。
我在做什么错了?
答案 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