【问题标题】:Delete specific strings from pandas dataframe with operators chaining使用运算符链接从 pandas 数据框中删除特定字符串
【发布时间】:2021-11-30 19:40:51
【问题描述】:

我想使用以下代码从 Sorte 列中删除我不想在我的数据框 file_df 中包含的带有正则表达式的特定字符串:

file_df = file_df[(file_df.Sorte != 'sonstige') & (file_df.Sorte != 'verauslagte Portokosten')
                  & (file_df.Sorte != 'erhaltenenzahlung Re  vom')
                  & (file_df.Sorte != 'geleistetenzahlung aus Re-Nr')
                  & (file_df.Sorte != '^.*Holzkisten geliefert.*$')
                  & (file_df.Sorte != '^.*Infomaterialktionspakete.*$')
                  & (file_df.Sorte != '^.*Aloe Vera  haben wir nicht im Sortiment.*$') 
                  & (file_df.Sorte != '^.*Anzeigenvorlage Planten ut`norden.*$')]

但不知何故,当我执行这段代码时,这些字符串仍然在数据集中,我不知道为什么。我想链接这个表达式,以免创建太多副本。

【问题讨论】:

  • 你这里不是使用正则表达式,而是简单的字符串比较
  • 你应该使用 OR '|'反而 ?您的代码似乎在说 Var != 'A' & Var != 'B'。不能同时是 A 和 B。
  • @mozway 如何使用正则表达式比较字符串?
  • @EBDS 由于所有字符串都在“Sorte”列中,我猜想“&”应该作为所有不需要的字符串不应该在剩余数据集中的条件都可以满足,但我可以试试“|”
  • 我想可以试试 == 和 "|"因为你想删除它们。然后用~来否定它。

标签: python pandas dataframe operators regular-language


【解决方案1】:

可能是这样的:

ls = ['sonstige', 'verauslagte Portokosten', 'erhaltenenzahlung Re  vom', ...]
file_df = file_df[~ file_df.country.str.contains('|'.join(ls))]

【讨论】:

    【解决方案2】:

    感谢您的回答! 我还看到,我在问题中发布的代码以某种方式适用于数据集中的某些字符串,而对于其他字符串则不行......

    但我从https://stackoverflow.com/a/54410702/14553595 的答案中找到了另一个解决方案,它基本上是您的建议的组合:

    file_df = file_df.loc[:,~(file_df.columns.str.contains('^.*Fracht.*$', case=False)
                              | file_df.columns.str.contains('^.*Angebotspaket.*$', case=False)
                              | file_df.columns.str.contains('^.*Werbe.*$', case=False)
                              | file_df.columns.str.contains('^.*Vita.Verde.*$', case=False)
                              | file_df.columns.str.contains('^.*zahlung.*$', case=False)
                              | file_df.columns.str.contains('^.*Europalette.*$', case=False)
                              | file_df.columns.str.contains('^.*Angebotspaket.*$', case=False)
                              | file_df.columns.str.contains('^.*Aufkleber fuer Saeule.*$', case=False)
                              | file_df.columns.str.contains('^.*Aufsetzer.*$', case=False)
                              | file_df.columns.str.contains('^.*Ausstellen der Pflanzen in die Beete  pauschal.*$', case=False)
                              | file_df.columns.str.contains('^.*Ausstellungsflaeche.*$', case=False)
                              | file_df.columns.str.contains('^.*Auswaschen.*$', case=False)
                              | file_df.columns.str.contains('^.*Bild.*$', case=False)
                              | file_df.columns.str.contains('^.*etikette.*$', case=False)
                              )]
    

    【讨论】:

      猜你喜欢
      • 2018-11-16
      • 1970-01-01
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 2021-03-12
      相关资源
      最近更新 更多