Ros*_*rma 5 python csv random shuffle
我有一个带有数据的输入csv文件:
a 15
b 14
c 20
d 45
Run Code Online (Sandbox Code Playgroud)
我想生成一个不同的csv文件,它将包含输入文件中的完整数据行,但行应该被洗牌.
像输出文件可能包含值 -
b 14
a 15
c 20
d 45
Run Code Online (Sandbox Code Playgroud)
我试过这段代码:
import random
import sys
op=open('random.csv','w+')
ip=open(sys.argv[1],'r')
data=ip.read()
data1=str(random.choices(data))
op.write(data1)
op.close()
Run Code Online (Sandbox Code Playgroud)
另一个镜头使用pandas.您可以阅读.csv文件:
df = pd.read_csv('yourfile.csv', header=None)
Run Code Online (Sandbox Code Playgroud)
然后df.sample用来洗牌你的行.这将返回一个随机抽样的数据帧样本.使用frac=1您将整个集合视为样本:
In [18]: df
Out[18]:
0 1
0 a 15
1 b 14
2 c 20
3 d 45
In [19]: ds = df.sample(frac=1)
In [20]: ds
Out[20]:
0 1
1 b 14
3 d 45
0 a 15
2 c 20
Run Code Online (Sandbox Code Playgroud)
如果您需要再次保存新的洗牌文件,您可以:
ds.to_csv('newfile.csv')
Run Code Online (Sandbox Code Playgroud)
您可以使用Python random模块中的shuffle函数。像这样:
import random
fid = open("example.txt", "r")
li = fid.readlines()
fid.close()
print(li)
random.shuffle(li)
print(li)
fid = open("shuffled_example.txt", "w")
fid.writelines(li)
fid.close()
Run Code Online (Sandbox Code Playgroud)
打印命令导致:
['b 14\n', 'a 15\n', 'c 20\n', 'd 45\n']
['d 45\n', 'a 15\n', 'b 14\n', 'c 20\n']
Run Code Online (Sandbox Code Playgroud)
新文件是这样的:
d 45
a 15
b 14
c 20
Run Code Online (Sandbox Code Playgroud)
只需确保在每个原始行的末尾都有一个换行符。