【问题标题】:How to modify strings in a pandas dataframe (regex?)如何修改熊猫数据框中的字符串(正则表达式?)
【发布时间】: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


【解决方案1】:

这应该删除所有 ',15' 值:

dataframe['string column'] = dataframe['string column'].apply(lambda value:[value].split(',')[0] if [value].split(',')[0] == '15' else value)

如果它们是您提供的格式,这应该删除所有 ',15' 值:

dataframe['string column'] = dataframe['string column'].apply(lambda value:[value].split(',')[0] if ([value].split(',')[0] == '15') & ('P-A1-' in value) else value)

【讨论】:

    猜你喜欢
    • 2018-12-25
    • 2021-03-13
    • 2018-09-24
    • 2020-09-23
    • 1970-01-01
    • 2020-10-23
    • 2020-01-08
    • 2021-03-06
    • 1970-01-01
    相关资源
    最近更新 更多