Python 什么';从数据集中快速删除不需要的数据的最佳方法是什么?

Python 什么';从数据集中快速删除不需要的数据的最佳方法是什么?,python,pandas,Python,Pandas,我有一个格式类似于表的大型数据集(14列x 10M行)。有些项目可以是NaN,我不想要,对于两列'x0'和'y0',我想要删除-30到+30之外的值 我的代码,如下所示,一次循环一行数据集,速度非常慢。有没有更有效的方法去除我不想要的线条 def cleanDataset(dataset): findNanYs = pd.isnull(dataset) forDeletion = [] for i in range(0,dataset.shape[0]):

我有一个格式类似于表的大型数据集(14列x 10M行)。有些项目可以是NaN,我不想要,对于两列'x0'和'y0',我想要删除-30到+30之外的值

我的代码,如下所示,一次循环一行数据集,速度非常慢。有没有更有效的方法去除我不想要的线条

def cleanDataset(dataset):

    findNanYs = pd.isnull(dataset)
    forDeletion = []

    for i in range(0,dataset.shape[0]):
        if findNanYs.T.any()[i]:  # strike NaN
            forDeletion.append(i)
        elif abs(dataset['x0'][i]) > 30:
            forDeletion.append(i)        
        elif abs(dataset['y0'][i]) > 30:
            forDeletion.append(i)        

    cleanDS = dataset.drop(forDeletion, axis=0)
    return cleanDS
尝试:

你可以找到更多关于dropna的信息

您可以尝试:

# set number of rows
nrows = 50

# generate dataframe
a = np.random.randn(nrows)
mask = np.random.choice([1, 0], a.shape, p=[.1, .9]).astype(bool)
a[mask] = np.nan
df = pd.DataFrame({'A': a, 'x0': np.random.randint(-50, 50, nrows), 'y0': np.random.randint(-50, 50, nrows)})

# drop rows
df.x0 = df.x0.where(abs(df.x0) <= 30)
df.y0 = df.y0.where(abs(df.y0) <= 30)
df.dropna()
#设置行数
nrows=50
#生成数据帧
a=np.random.randn(nrows)
mask=np.random.choice([1,0],a.shape,p=[1,9]).astype(bool)
a[掩码]=np.nan
df=pd.DataFrame({'A':A,'x0':np.random.randint(-50,50,nrows),'y0':np.random.randint(-50,50,nrows)})
#删除行
df.x0=df.x0。其中(abs(df.x0)除了上面给出的dropna之外,还使用query来过滤数据,这对于大表来说在内存方面效率更高,如下所示:

dataset.query('-30 < x0 < 30', inplace=True)
dataset.query('-30
dataset.query('-30 < x0 < 30', inplace=True)