我想从df1中删除某些行。我确实以这种方式编写条件并向我显示了我想要删除的确切行。但是,当我尝试对此数据应用drop时,它不起作用:
to_be deleted = df1.loc[df1['barcode'].str.contains('....-..-....-11.', regex=True)]
当我使用
时to_be deleted.head()
print(len(to_be deleted))
我可以看到要删除的数据,这意味着代码可以正常工作。 但是,当我尝试删除这些行时,它不起作用
df2 = df1.drop([df1['barcode'].str.contains('....-..-....-11.', regex=True)], axis=1, inplace=True)
我也试过
df2 = df1.drop(to_be_deleted, axis=1, inplace=True)
但它显示:
'Series' objects are mutable, thus they cannot be hashed
或
/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:1: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
如何删除我在(to_be_deleted)数据框中指定的这些行?
谢谢
答案 0 :(得分:0)
您无需使用pd.DataFrame.drop
:
mask = df1['barcode'].str.contains('....-..-....-11.', regex=True)
df1 = df1[~mask]
~
运算符表示否定。由于mask
是一个布尔数组,因此它被否定并用作df1
上的行过滤器。