随着条件下降

时间:2018-04-14 11:45:26

标签: python python-3.x pandas

我想从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)数据框中指定的这些行?

谢谢

1 个答案:

答案 0 :(得分:0)

您无需使用pd.DataFrame.drop

mask = df1['barcode'].str.contains('....-..-....-11.', regex=True)

df1 = df1[~mask]

~运算符表示否定。由于mask是一个布尔数组,因此它被否定并用作df1上的行过滤器。