使用 Pandas 仅获取 DataFrame 的样本
Get only a sample of a DataFrame with Pandas
我有一个 DataFrame,它有两列 content
和 target
。
DataFrame 有 1.000.000 行长,这是目标的分布:
- 目标 = 0 (100.000)
- 目标 = 1 (400.000)
- 目标 = 2 (500.000)
我需要在 DataFrame 中获得相同数量的目标值,所以我使用 sample()
来只获得目标为 x
的固定数量的行,这是我正在使用的代码:
samples = 100000
dataset[dataset['target'] == 0] = dataset[dataset['target'] == 0].sample(n=samples, axis=0)
dataset[dataset['target'] == 1] = dataset[dataset['target'] == 1].sample(n=samples, axis=0)
dataset[dataset['target'] == 2] = dataset[dataset['target'] == 2].sample(n=samples, axis=0)
例如,如果在执行后我访问 dataset[dataset['target'] == 2]
,它将 return 形状为 (100000, 2) 但仅访问 dataset
return 完全 与以前相同的数据集,我做错了什么?
由于您在每个 Target
中采样的样本较少,您可以使用 groupby().sample
:
# random_state for repeatability. Remove if needed
dataset = dataset.groupby('target').sample(n=samples, random_state=42)
我有一个 DataFrame,它有两列 content
和 target
。
DataFrame 有 1.000.000 行长,这是目标的分布:
- 目标 = 0 (100.000)
- 目标 = 1 (400.000)
- 目标 = 2 (500.000)
我需要在 DataFrame 中获得相同数量的目标值,所以我使用 sample()
来只获得目标为 x
的固定数量的行,这是我正在使用的代码:
samples = 100000
dataset[dataset['target'] == 0] = dataset[dataset['target'] == 0].sample(n=samples, axis=0)
dataset[dataset['target'] == 1] = dataset[dataset['target'] == 1].sample(n=samples, axis=0)
dataset[dataset['target'] == 2] = dataset[dataset['target'] == 2].sample(n=samples, axis=0)
例如,如果在执行后我访问 dataset[dataset['target'] == 2]
,它将 return 形状为 (100000, 2) 但仅访问 dataset
return 完全 与以前相同的数据集,我做错了什么?
由于您在每个 Target
中采样的样本较少,您可以使用 groupby().sample
:
# random_state for repeatability. Remove if needed
dataset = dataset.groupby('target').sample(n=samples, random_state=42)