Python 什么';从数据集中快速删除不需要的数据的最佳方法是什么?
我有一个格式类似于表的大型数据集(14列x 10M行)。有些项目可以是NaN,我不想要,对于两列'x0'和'y0',我想要删除-30到+30之外的值 我的代码,如下所示,一次循环一行数据集,速度非常慢。有没有更有效的方法去除我不想要的线条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]):
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)