假设我在一个csv文件中有一千行数据,每行有4列。
我想随机抽取950行数据,并分别保留其他50行。我将使用python进一步处理这两个数据集。
我如何轻松地做到这一点?
我使用熊猫按列读取csv文件。
答案 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:]]