根据列值删除数据框行

时间:2019-12-23 11:51:12

标签: python dataframe df

我已经基于网站(https://thispointer.com/python-pandas-how-to-drop-rows-in-dataframe-by-conditions-on-column-values/)创建了代码,以根据列值删除数据框中的行。 “ zone_type”列可以具有5个值之一(response_button_text,response_button_image,fixation,timelimit_screen或continue_button)。除非该行的值为“ response_button_image”,否则我要从数据框中删除该行。

# select all of the rows that are not to do with the task i.e. fixation screens etc.

indexZoneType = df[ (df['zone_type'] == 'fixation') & (df['zone_type'] == 'response_button_text') & (df['zone_type'] == 'timelimit_screen') & (df['zone_type'] == 'continue_button')].index

# delete these rows

df.drop(indexZoneType , inplace=True)

我认为该代码应该有效?并且我没有收到任何错误,但是执行print(df)时,数据帧没有更改。

谢谢。

1 个答案:

答案 0 :(得分:0)

好的,因此您的条件是互斥的,您可能想在此处使用“或”。

indexZoneType = df[ (df['zone_type'] == 'fixation') |(df['zone_type'] == 'response_button_text') | (df['zone_type'] == 'timelimit_screen') | (df['zone_type'] == 'continue_button')].index

甚至更好-使用df.isin(...)df.loc[...]

indexZoneType = df.loc[df['zone_type'].isin(['fixation', 'response_button_text', 'timelimit_screen', 'continue_button'])].index

或更简单:

indexZoneType = df.index[df['zone_type'].isin(['fixation', 'response_button_text', 'timelimit_screen', 'continue_button'])]

参考: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.isin.html https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.loc.html