删除不包含指定整数值的行(Pandas)

2024-04-18 06:02:13 发布

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

我有一个Pandas数据集,我想在应用ML算法之前清理它。我想知道如果一行的列的某个元素与一组值不匹配,是否可以删除该行。例如,如果我有数据帧:

    a    b    
0   1    6    
1   4    7    
2   2    4    
3   3    7    
...

我希望a的值是[1,3]中的一个,b的值是{}中的一个,这样我的最终数据集是:

^{pr2}$

目前,我的实现不起作用,因为我的一些数据行的值附加了错误的字符串。例如,我将使用类似于1abc的值代替1。因此,我为什么要删除任何不是该值的整数。在

我的解决方法也有点过时,因为我要删除列a中没有1或3的条目:

dataset = dataset[(dataset.commute != 1)]
dataset = dataset[(dataset.commute != 3)]

Tags: 数据方法字符串算法元素pandas错误条目
2条回答

你可以使用pandas isin()

df = df[df.a.isin([1,3]) & df.b.isin([6,7])]

    a   b
0   1   6
3   3   7

您可以将^{}与双^{}&一起使用:

df1 = df[(df['a'].isin([1,3])) & (df['b'].isin([6,7]))]
print (df1)
   a  b
0  1  6
3  3  7

或使用^{}

^{pr2}$

但如果need删除所有非数字行,则need ^{}与{}一起返回NaN,然后可以按^{}过滤:

df = pd.DataFrame({'a':['1abc','2','3'],
                   'b':['4','5','dsws7']})

print (df)
      a      b
0  1abc      4
1     2      5
2     3  dsws7

mask = pd.to_numeric(df['a'], errors='coerce').notnull() & 
       pd.to_numeric(df['b'], errors='coerce').notnull()
df1 = df[mask].astype(int)
print (df1)
   a  b
1  2  5

如果需要,请检查某个值是NaN还是None

df = pd.DataFrame({'a':['1abc',None,'3'],
                   'b':['4','5',np.nan]})
print (df)
      a    b
0  1abc    4
1  None    5
2     3  NaN

print (df[df.isnull().any(axis=1)])
      a    b
1  None    5
2     3  NaN

相关问题 更多 >