Python数据帧:按列值删除我的列表中的行

2024-04-29 14:05:04 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Python已经一个月了,我想用一条规则清理我的数据帧。我有df和一个列表(lst\u 1),如下所示。在item2列中,我有string的值。如果item2列的值不在我的lst\u 1中,我想删除任何行。你知道吗

df=
    key   sellyr  brand  makrc  item1  item2  
0   da12  2013    imp    apt    furi   dcs    
1   da32  2013    sa     rye    rye    app    
2   da14  2013    sa     NaN    NaN    pro
3   da11  2013    sa     prm    NaN    zdc    
4   da31  2013    sa     grm    wdm    czd  
........

#and my list is below
lst_1 = ['dcs','app','czd','des','sed']

#and my output should be
df_new=
    key   sellyr  brand  makrc  item1  item2  
0   da12  2013    imp    apt    furi   dcs    
1   da32  2013    sa     rye    rye    app    
4   da31  2013    sa     grm    wdm    czd  
........

我有.1百万行的值,所以我希望得到最有效的代码来删除行。有什么想法吗?你知道吗

----------编辑------

还有一件事。如果我想用不包括np.nan公司值,df_result2=df[测向项目1!= np.nan公司]工作?你知道吗

df_result2=
    key   sellyr  brand  makrc  item1  item2  
0   da12  2013    imp    apt    furi   dcs    
1   da32  2013    sa     rye    rye    app       
4   da31  2013    sa     grm    wdm    czd  
........

Tags: keyappdfsaimplstitem1brand
3条回答

包括第二部分(NaN)的答案,也使用“&;运算符处理两种情况:

print(df[df.item2.isin(lst_1) & df.item1.notnull()])

输出:

    key  sellyr brand makrc item1 item2
0  da12    2013   imp   apt  furi   dcs
1  da32    2013    sa   rye   rye   app
4  da31    2013    sa   grm   wdm   czd

试试这个:

df_new = df[df['item2'].isin(lst_1)]

如果我理解正确的话,这应该是你想要的:

df = df[df.item2 in lst_1]

不过,我认为如果将lst\u 1转换为字典,在效率方面可能会更好,因为在字典中查找的次数很多,而且查找速度更快。你知道吗

相关问题 更多 >