Python Dataframe:使用循环从Dataframe中删除行

时间:2018-01-08 18:29:50

标签: python loops dataframe rows

我想从我的pandas数据框中删除某些行。我用手工方式拼出了我不想包含的每个项目编号。

如何执行下面代码中显示的相同任务,但使用循环?

df_adhoc_1_final = df_adhoc_1_final[df_adhoc_1_final['ITEM'].str.contains('4888') == False]
df_adhoc_1_final = df_adhoc_1_final[df_adhoc_1_final['ITEM'].str.contains('4889') == False]
df_adhoc_1_final = df_adhoc_1_final[df_adhoc_1_final['ITEM'].str.contains('4890') == False]
df_adhoc_1_final = df_adhoc_1_final[df_adhoc_1_final['ITEM'].str.contains('4891') == False]
df_adhoc_1_final = df_adhoc_1_final[df_adhoc_1_final['ITEM'].str.contains('4892') == False]
df_adhoc_1_final = df_adhoc_1_final[df_adhoc_1_final['ITEM'].str.contains('4893') == False]

2 个答案:

答案 0 :(得分:1)

这里不需要循环。对于任何pandas操作,几乎总是采用矢量化,非循环方法。这是一种方法。

首先,初始化代码列表 -

codes = ['4888', '4889', ... '4893']

或者,

codes = np.arange(4888, 4894).astype(str)

现在,使用str.contains进行过滤。您需要使用| OR管道将每个代码作为单个正则表达式加入 -

df = df[~df['ITEM'].str.contains('|'.join(codes))]

如果代码是ITEM列中的唯一内容,则可以使用isin -

df = df[~df['ITEM'].isin(codes)]

答案 1 :(得分:0)

怎么样:

for val in ['4888','4889','4890','4891','4892','4893']:
    df_adhoc_1_final = df_adhoc_1_final[df_adhoc_1_final['ITEM'].str.contains(val) == False]