gpt4 book ai didi

python - Pandas 中的采样组

转载 作者:太空狗 更新时间:2023-10-29 17:50:48 25 4
gpt4 key购买 nike

假设我想从 Pandas 中的数据框做一个分层样本,这样我就可以为给定列的每个值获得 5% 的行。我该怎么做?

例如,在下面的数据框中,我想对与 Z 列的每个值关联的行的 5% 进行采样。有什么方法可以从内存中加载的数据框中采样组吗?

> df 

X Y Z
1 123 a
2 89 b
1 234 a
4 893 a
6 234 b
2 893 b
3 200 c
5 583 c
2 583 c
6 100 c

更一般地说,如果我将这个数据帧放在磁盘中的一个大文件中(例如 8 GB 的 csv 文件)会怎样。有没有什么方法可以在不必将整个数据帧加载到内存中的情况下进行这种采样?

最佳答案

如何使用“usecols”选项仅将“Z”列加载到内存中。假设文件是​​ sample.csv。如果你有一堆列,那应该使用更少的内存。然后假设适合内存,我认为这对你有用。

stratfraction = 0.05
#Load only the Z column
df = pd.read_csv('sample.csv', usecols = ['Z'])
#Generate the counts per value of Z
df['Obs'] = 1
gp = df.groupby('Z')
#Get number of samples per group
df2 = np.ceil(gp.count()*stratfraction)
#Generate the indices of the request sample (first entrie)
stratsample = []
for i, key in enumerate(gp.groups):
FirstFracEntries = gp.groups[key][0:int(df2['Obs'][i])]
stratsample.extend(FirstFracEntries)
#Generate a list of rows to skip since read_csv doesn't have a rows to keep option
stratsample.sort
RowsToSkip = set(df.index.values).difference(stratsample)
#Load only the requested rows (no idea how well this works for a really giant list though)
df3 = df = pd.read_csv('sample.csv', skiprows = RowsToSkip)

关于python - Pandas 中的采样组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25203883/

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