什么是从Pandas数据集快速移除不需要数据的最佳方法?

2024-10-02 18:21:18 发布

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

我有一个格式类似于表的大型数据集(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

Tags: 数据方法代码格式absnandataset速度
3条回答

您可以尝试:

# 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()

尝试:

您可以找到有关dropnahere的更多信息

This drops NaN rows.
dataset = dataset.dropna(how=any)

# And you can filter and drop unwanted data as below
dataset = dataset.loc[abs(dataset['x0']) > 30]
dataset = dataset.loc[abs(dataset['y0']) > 30]

除了上面给出的dropna之外,使用query来过滤数据,对于大表来说,这在内存方面效率更高,如下所示:

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

相关问题 更多 >