gpt4 book ai didi

python - 从 Pandas DataFrame 中提取样本,保留所有相同类型的值

转载 作者:太空宇宙 更新时间:2023-11-04 02:22:29 24 4
gpt4 key购买 nike

我有一个巨大的 CSV,它是这样制作的:

type, value
A 1
B 4
C 6
A 25
D 5
B 7

由于要处理的行太多,我想取一个样本,但是这个样本的特殊性必须是:必须取相同类型的所有行。

我从对行进行随机抽样开始:

num_lines = sum(1 for line in open('file.csv') - 1
sample_lines = int(num_lines * 0.01)
skip = sorted(random.sample(range(num_lines), num_lines - sample_lines))
df = pd.read_csv('file.csv', sep=';', skiprows=skip)

但这只给我一个行的随机样本。我想要获得的是一个类型的随机样本

我心里有大概的流程:

  1. 将整个 CSV 导入 Pandas DataFrame
  2. 生成要提取的(随机)类型列表(例如 [A, B])
  3. 仅从 DataFrame 中提取类型为“A”或“B”的行

结果应该是这样的:

type  value
A 1
B 4
A 25
B 7

感谢您提供的任何帮助。

最佳答案

这是正确的方法吗?

首先,通过从 CSV 文件导入来创建 DataFrame。然后,创建包含所有可能类型列表的数组,并仅选择其中的 n 个(随机)。最后,保存仅包含这 n 种类型(但包含与它们相关的所有数据)的新 DataFrame。

n = 10
df = pd.read_csv('file.csv', sep=';')
random_types = np.random.choice(df.type.unique(), n)
m = df['type'].isin(random_types)
df_sample = df.loc[m]

不过,这种方法的缺点是必须将整个 CSV 文件加载到内存中。

完整示例

import pandas as pd
import numpy as np

np.random.seed(400)

data = '''\
type value
A 1
B 4
C 6
A 25
D 5
B 7'''

fileobj = pd.compat.StringIO(data)
df = pd.read_csv(fileobj, sep='\s+')
n = 2
random_types = np.random.choice(df.type.unique(), n)
print(df.loc[df['type'].isin(random_types)])

返回:

  type  value
0 A 1
3 A 25
4 D 5

关于python - 从 Pandas DataFrame 中提取样本,保留所有相同类型的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51232766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com