当前位置: 首页 > 知识库问答 >
问题:

用python洗牌csv文件的行[关闭]

岳研
2023-03-14

我正在寻找一种方法来导入python中的csv文件,让它随机洗牌所有行,并创建一个新的csv文件,其中的行被洗牌。我不知道如何开始。有人知道吗?

共有3个答案

甄志
2023-03-14

您可以将带有csv库的csv读取到一个数组中,然后将数组打乱到一个新的数组中,并将其作为一个新的csv写回来。如果您知道csv的行数,或者直接将其打乱到数组中。

蔡鸿骞
2023-03-14

您可以使用熊猫:

import pandas as pd
df = pd.read_csv(CSV_PATH)
x = df.sample(frac=1)
x.to_csv(NEW_CSV_PATH, index=False)

编辑:最后一行中的index=False将避免在加载csv时写入熊猫倾向于添加的id列。

关于df.sample()(从这里):

frac关键字参数指定随机样本中要返回的行的分数,因此frac=1表示返回所有行(以随机顺序)。

严正初
2023-03-14

读取csv文件:使用stdlibcsv模块。

洗牌列表:使用stdlib随机模块。

编写csv文件:使用stdlibcsv模块。

请注意,某些csv格式(excel等)允许在单元格内换行,因此使用csv模块更安全。如果您有101%的信心永远不会有这样的csv格式需要处理,并且需要尽可能加快代码速度,您可以直接读取文件,但这并不真正安全。

还要注意,这将读取内存中的整个文件,所以要小心巨大的csv文件。

 类似资料:
  • 我有以下数据帧: 数据帧是从csv文件中读取的。所有类型为1的行都位于顶部,后面是类型为2的行,后面是类型为3的行,以此类推。 我想改变数据帧行的顺序,这样所有的都是混合的。一个可能的结果可能是: 我怎样才能做到这一点?

  • 问题内容: 我想知道,是否有某种方法可以在mysql / sql中改组字符串的字母,即类似 伪代码的内容 :? 从http://dev.mysql.com/doc/refman/5.0/en/string- functions.html 找不到任何内容,对其进行搜索似乎只是找到改组结果的解决方案,而不是字符串。 问题答案: 干得好: 有关输出,请参见sqlfiddle.com。 已使用mariad

  • 问题内容: 我只想删除第三行中值为‘0’的行。数据示例如下: 因此,第一行将需要删除,而第二行将保留。 到目前为止,我所拥有的如下: 任何帮助都会很棒 问题答案: 你很亲密 目前,您将整数与进行比较,然后将其与字符串进行比较。当您从文件中读取数据时,它是一个字符串而不是整数,因此这就是您的整数检查当前失败的原因: 另外,您可以使用关键字使当前代码略显pythonic,从而减少代码中的行,并且可以省

  • 大多数纸牌游戏都需要洗牌,也就是让纸牌随机排列。在第10.5节,我们看到了怎样生成随机数,但怎样利用随机数实现洗牌功能却并非显然意见的。 一种可行的方案是,模拟人洗牌的方法,将牌分为两堆,然后通过在每个牌堆中轮流选择的方式实现原牌堆的重新组织。因为一般而言,人并不能做到完美地洗牌,而程序经过大约7次迭代之后,牌堆中纸牌的顺序已经相当随机了。但是计算机程序每次在做完美洗牌的时候有一个令人讨厌的属性—

  • 在第13.6节我们编写了一个洗牌算法的伪代码。假设shuffleDeck函数实现洗牌功能,其参数为一个牌堆,我们就可以这样创建牌堆并洗牌: Deck deck; // 创建一个标准的52张牌的牌堆 deck.shuffle (); // 洗牌 然后,使用subdeck函数来分几手牌: Deck hand1 = deck.subdeck (0, 4); Deck hand2 = dec

  • 我目前正在编写一个脚本,读取CSV文件中两列浮点数,并找到每列的平均值。我不明白为什么我的代码给我一个关闭文件的ValueError I/O操作。 我的代码有两个open语句,因为据我所知,在向第二列添加并查找平均值之前,必须关闭文件并重新打开它。 下面是我的代码,我很感激能得到的任何反馈,这对我来说毫无意义。非常感谢。 语言:Python 3.6