使用运算符链接从 pandas 数据框中删除特定字符串
Delete specific strings from pandas dataframe with operators chaining
我想从列 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.*$')]
但是不知何故,当我执行这段代码时,这些字符串仍然在数据集中,我不明白为什么。我想链接这个表达式,不要创建那么多副本。
可能是这样的:
ls = ['sonstige', 'verauslagte Portokosten', 'erhaltenenzahlung Re vom', ...]
file_df = file_df[~ file_df.country.str.contains('|'.join(ls))]
感谢您的回答!
我还看到,我在问题中发布的代码以某种方式对数据集中的某些字符串有效,对其他字符串无效...
但我从 的答案中找到了另一个适合我的解决方案,它基本上是您的建议的组合:
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)
)]
我想从列 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.*$')]
但是不知何故,当我执行这段代码时,这些字符串仍然在数据集中,我不明白为什么。我想链接这个表达式,不要创建那么多副本。
可能是这样的:
ls = ['sonstige', 'verauslagte Portokosten', 'erhaltenenzahlung Re vom', ...]
file_df = file_df[~ file_df.country.str.contains('|'.join(ls))]
感谢您的回答! 我还看到,我在问题中发布的代码以某种方式对数据集中的某些字符串有效,对其他字符串无效...
但我从 的答案中找到了另一个适合我的解决方案,它基本上是您的建议的组合:
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)
)]