用Python大约一个月了,我想用一条规则来清理我的DataFrame。我有df和一个列表(lst_1)如下。在item2列中,我有string的值。我想删除item2列的值不在我的lst_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
........
我有一百万行值,所以我希望获得最有效的代码来删除行。有什么想法吗?
--------编辑-------
还有一件事。如果我想用不包含np.nan值的item1 colums对我的df进行排序,df_result2 = df [df.item1!= 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
........
答案 0 :(得分:1)
试试这个:
df_new = df[df['item2'].isin(lst_1)]
答案 1 :(得分:1)
如果我理解正确,那么你应该做的就是:
df = df[df.item2 in lst_1]
我认为如果将lst_1转换为字典,效率可能更好,因为查找发生了很多,查找在字典中更快。
答案 2 :(得分:1)
包括第二部分(NaN)的回答也使用“&” 2个条件的运算符:
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