我已经基于网站(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)
时,数据帧没有更改。
谢谢。
答案 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