如何在CSV文件中随机选择一定数量的行并保留其他行

时间:2018-07-20 18:38:08

标签: python python-3.x pandas csv

假设我在一个csv文件中有一千行数据,每行有4列。

我想随机抽取950行数据,并分别保留其他50行。我将使用python进一步处理这两个数据集。

我如何轻松地做到这一点?

我使用熊猫按列读取csv文件。

3 个答案:

答案 0 :(得分:3)

以下应该可以解决问题:

public static MeasureRepository getInstance(final AppDataBase database, long sheetId) {
    if (sInstance == null) {
        synchronized (MeasureRepository.class) {
            if (sInstance == null) {
                sInstance = new MeasureRepository(database, sheetId);
            }

        }
    }
    if (sInstance.getSheetId() != sheetId) {
        sInstance = new MeasureRepository(database, sheetId);
    }
    return sInstance;
}

通过pd.DataFrame.sample方法,您可以从train_file = "training_data_ez.csv" train_features = pd.read_csv(train_file, usecols=['var', 'sq', 'sin']) 中随机抽样。默认情况下,这是不可替换的,即我们不会对同一行进行两次采样。

pd.DataFrame

剩下的50个,我们只能通过df_950 = train_features.sample(950) 从原始DataFrame中获得950行。

dropping

如果需要在随机样本中保留类平衡,则可以使用scikit-learn的train_test_split函数。

答案 1 :(得分:2)

一种简单的方法是使用train_test_split from sklearn,并将test_size设置为0.05(因为1000的0.05%是50):

from sklearn.model_selection import train_test_split

df1, df2 = train_test_split(train_file, test_size=0.05)

然后df1将是您的950行数据框,而df2将是您的50行数据框

答案 2 :(得分:2)

另一个选项可以是:

import random
r = (random.sample(range(0, 1000), 1000))
df1 = df.iloc[r[0:950]]
df2 = df.iloc[r[950:]]