,如果一行包含'9999 dons noce'在任何列中,我如何删除数据框中的所有行?
我已经能够在整个dataFrame中找到基于值(字符串,数值等)的行删除行的解决方案,或者根据特定列中的值删除行,或从具有的dataframe中删除已具有的行几列使用其名称。
这是我发现的最接近的东西,但是这个解决方案对我不起作用,因为由于纯音符(76列以上),我无法输入所有列名。
以下是示例数据集
pd.DataFrame.from_items([('RespondentId', ['1ghi3g','335hduu','4vlsiu4','5nnvkkt','634deds','7kjng']), ('Satisfaction - Timing', ['9-Excellent','9-Excellent','9999-Don't Know','8-Very Good','1-Very Unsatisfied','9999-Don't Know']),('Response Speed - Time',['9999-Don't Know','9999-Don't Know','9-Excellent','9-Excellent','9-Excellent','9-Excellent'])])
删除包含" 9999不知道"的4行后,输出应该看起来像这样,以便我可以用已清理数据编写一个新的Excel文件。
pd.DataFrame.from_items([('RespondentId', ['5nnvkkt','634deds']), ('Satisfaction - Timing', ['8-Very Good','1-Very Unsatisfied']),('Response Speed - Time',['9-Excellent','9-Excellent'])])
使用
In [677]: df[~(df == "9999-Don't Know").any(axis=1)]
Out[677]:
RespondentId Satisfaction - Timing Response Speed - Time
3 5nnvkkt 8-Very Good 9-Excellent
4 634deds 1-Very Unsatisfied 9-Excellent
或
In [683]: df[(df != "9999-Don't Know").all(axis=1)]
Out[683]:
RespondentId Satisfaction - Timing Response Speed - Time
3 5nnvkkt 8-Very Good 9-Excellent
4 634deds 1-Very Unsatisfied 9-Excellent
与
相同In [686]: df[~df.eq("9999-Don't Know").any(axis=1)]
Out[686]:
RespondentId Satisfaction - Timing Response Speed - Time
3 5nnvkkt 8-Very Good 9-Excellent
4 634deds 1-Very Unsatisfied 9-Excellent
或
In [687]: df[df.ne("9999-Don't Know").all(axis=1)]
Out[687]:
RespondentId Satisfaction - Timing Response Speed - Time
3 5nnvkkt 8-Very Good 9-Excellent
4 634deds 1-Very Unsatisfied 9-Excellent
使用混合列类型,请参阅 @Pir的评论df.astype(object)
In [695]: df[df.astype(object).ne("9999-Don't Know").all(axis=1)]
Out[695]:
RespondentId Satisfaction - Timing Response Speed - Time
3 5nnvkkt 8-Very Good 9-Excellent
4 634deds 1-Very Unsatisfied 9-Excellent