【发布时间】:2015-03-13 16:29:28
【问题描述】:
假设我在 Pandas DataFrame 中有以下行:
970 P-A1-1019-03-C15,15 23987896 1 8
971 P-A1-1019-06-B15,15 23251711 4 8
972 P-A1-1019-08-C15,15 12160034 2 8
973 P-A1-1020-01-D15,15 8760012 1 8
我想更改第二列以从字符串中删除“,15”。期望的最终状态是这样的:
970 P-A1-1019-03-C15 23987896 1 8
971 P-A1-1019-06-B15 23251711 4 8
972 P-A1-1019-08-C15 12160034 2 8
973 P-A1-1020-01-D15 8760012 1 8
要删除的内容并不总是“,15”,它可能是“,10”、“,03”、“,4”等。此外,输入中的某些行的格式不同,并且可能看起来像这样:
4 RR00-0,2020338 24380076 4 12
5 RR00-0,2020738 10562767 2 12
6 ,D 24260808 1 12
7 ,D 23521158 1 12
最初,我只对字符串符合“P-A1-1019-03-C15”形式的情况感兴趣,因此能够删除不匹配的行会很好具体格式。
是否有内置的方法来进行这种处理,还是我需要手动迭代每一行?
【问题讨论】:
-
您的第一件事很简单,只需执行
df['col'] = df['col'].str.replace(',15',''),第二件事您可以使用诸如df[df['col'].str.contains(regex)]之类的正则表达式进行过滤 -
str.replace(',15','') 是否适用于要删除的内容为 ',11' 的情况?
-
不,它会寻找完全匹配,这取决于您的数据的变化程度,您可以说对字符串进行切片:
df['col'] = df['col'].str.[:-3]这将去掉最后 3 个字符(我想,我可能是减一个)或者这样做:df['col'] = df['col'].str[:15]如果你想要前 16 个字符 -
然后我可以先用
df[df['col'].str.contains(regex)]进行过滤,然后,一旦所有字符串都统一格式化,去掉最后三个... -
类似的东西,但如果所有 duff 值都小于该长度,则说
df[df['col'].str.len() >=16]可能更容易,只要它足够精确以匹配您的数据,正则表达式模式会更好期待
标签: python regex string pandas