[英]How to drop Pandas DataFrame rows with condition to keep specific column value
[英]Drop rows if value in a specific column is not an integer in pandas dataframe
如果我有一个数据框并想删除其中一列中的值不是整数的任何行,我该怎么做?
如果值不在 0-2 范围内,另一种方法是删除行,但由于我不确定如何执行其中任何一个,我希望有人可以这样做。
这是我尝试过的,但不知道为什么:
df = df[(df['entrytype'] != 0) | (df['entrytype'] !=1) | (df['entrytype'] != 2)].all(1)
我提出了两种方法:
In [212]:
df = pd.DataFrame({'entrytype':[0,1,np.NaN, 'asdas',2]})
df
Out[212]:
entrytype
0 0
1 1
2 NaN
3 asdas
4 2
如果值的范围如您所说的那样受限制,那么使用isin
将是最快的方法:
In [216]:
df[df['entrytype'].isin([0,1,2])]
Out[216]:
entrytype
0 0
1 1
4 2
否则我们可以转换为 str 然后调用.isdigit()
In [215]:
df[df['entrytype'].apply(lambda x: str(x).isdigit())]
Out[215]:
entrytype
0 0
1 1
4 2
str("-1").isdigit()
为False
str("-1").lstrip("-").isdigit()
工作但不好。
df.loc[df['Feature'].str.match('^[+-]?\\d+$')]
对于您的问题,反向设置
df.loc[ ~(df['Feature'].str.match('^[+-]?\\d+$')) ]
我们有多种方法可以做到这一点,但我发现这种方法既简单又高效。
#Using drop() to delete rows based on column value
df.drop(df[df['Fee'] >= 24000].index, inplace = True)
# Remove rows
df2 = df[df.Fee >= 24000]
# If you have space in column name
# Specify column name with in single quotes
df2 = df[df['column name']]
# Using loc
df2 = df.loc[df["Fee"] >= 24000 ]
# Delect rows based on multiple column value
df2 = df[ (df['Fee'] >= 22000) & (df['Discount'] == 2300)]
# Drop rows with None/NaN
df2 = df[df.Discount.notnull()]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.