我想从我的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]
答案 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]