从数据帧生成带有随机样本的输出文件

2024-06-07 06:55:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个500K行的数据帧。我需要将随机选择的100行的集合分发给志愿者,以便贴标签

例如:

df = pd.DataFrame(np.random.randint(0,450,size=(450,1)),columns=list('a'))

我可以删除100行的随机样本,并输出带有时间戳的文件:

df_subset=df.sample(100)
df_subset.to_csv(time.strftime('%Y%m%d_%H%M%S') + 'dfsample.csv')
df=df.drop(df_subset.index)

上述方法可行,但如果我尝试将其应用于整个示例数据帧:

while len(df)>0:
        df_subset=df.sample(100)
        df_subset.to_csv(time.strftime('%Y%m%d_%H%M%S') + 'dfsample.csv')
        df=df.drop(df_subset.index)

它连续运行-我的预期输出是5个timestampdfsample.csv文件,其中4个文件有100行,第五个50行都是从df中随机选择的,但是df.drop(df_sample.index)不会更新df,因此条件始终为真,它将永远运行以生成csv文件。我解决这个问题有困难

如有任何指导,将不胜感激

更新

这让我几乎达到了目的:

for i in range(4):
        df_subset=df.sample(100)
        df=df.drop(df_subset.index)
        time.sleep(1) #added because runs too fast for unique naming
        df_subset.to_csv(time.strftime('%Y%m%d_%H%M%S') + 'dfsample.csv')

它要求我指定文件的数量。如果我说5作为示例df,我在5号得到一个错误。我希望有5个文件,第5个有50行,但不知道如何做到这一点


Tags: 文件csvto数据sample示例dffor
2条回答

另一种方法是洗牌你的行和摆脱可怕的循环

df.sample(frac=1)

并保存无序数据帧的片段

运行代码之后,我认为问题不在于df.drop 但是在包含time.strftime('%Y%m%d_%H%M%S') + 'dfsample.csv'的行中,因为Pandas会在一秒钟内创建多个CSV文件,这可能会导致一些覆盖问题

我认为,如果您希望使用时间戳为文件添加标签,那么使用毫秒级别可能更有用,并且可以防止覆盖的可能性。就你而言

while len(df)>0:
  df_subset=df.sample(100)
   
  df_subset.to_csv(datetime.now().strftime("%Y%m%d_%H%M%S.%f") + 'dfsample.csv')
  df=df.drop(df_subset.index)

相关问题 更多 >