我有一个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行,但不知道如何做到这一点
另一种方法是洗牌你的行和摆脱可怕的循环
并保存无序数据帧的片段
运行代码之后,我认为问题不在于
df.drop
但是在包含time.strftime('%Y%m%d_%H%M%S') + 'dfsample.csv'
的行中,因为Pandas会在一秒钟内创建多个CSV文件,这可能会导致一些覆盖问题我认为,如果您希望使用时间戳为文件添加标签,那么使用毫秒级别可能更有用,并且可以防止覆盖的可能性。就你而言
相关问题 更多 >
编程相关推荐