【发布时间】:2016-10-21 08:00:36
【问题描述】:
我在从大型 csv 文件读取随机行并将其移动到另一个 CSV 文件时遇到问题,在 Windows 上使用 0.18.1 pandas 和 2.7.10 Python。
我只想将随机选择的行加载到内存中并将它们移动到另一个 CSV。我不想将第一个 CSV 的全部内容加载到内存中。
这是我使用的代码:
import random
file_size = 100
f = open("customers.csv",'r')
o = open("train_select.csv", 'w')
for i in range(0, 50):
offset = random.randrange(file_size)
f.seek(offset)
f.readline()
random_line = f.readline()
o.write(random_line)
当前的输出看起来像这样:
2;flhxu-name;tum-firstname; 17520;buo-city;1966/04/24;wfyz-street; 96;GA;GEORGIA
1;jwcdf-name;fsj-firstname; 13520;oem-city;1954/02/07;amrb-street; 145;AK;ALASKA
1;jwcdf-name;fsj-firstname; 13520;oem-city;1954/02/07;amrb-street; 145;AK;ALASKA
我的问题有两个:
-
我还想在第二个 csv 中查看标题,而不仅仅是行。
-
随机函数只能选择一行。
输出应该是这样的:
id;name;firstname;zip;city;birthdate;street;housenr;stateCode;state
2;flhxu-name;tum-firstname; 17520;buo-city;1966/04/24;wfyz-street; 96;GA;GEORGIA
1;jwcdf-name;fsj-firstname; 13520;oem-city;1954/02/07;amrb-street; 145;AK;ALASKA
【问题讨论】:
-
您没有选择随机行。当您在文件中寻找一个随机数时,您很可能位于该行中间的某个位置。
-
@OskarSkog:否:前半行已删除。但这仍然很笨拙。看我的回答。
-
你说你使用熊猫,但我在这里看不到。看来您真正想做的是拆分数据集(我猜是出于 ml 目的),pandas 有 df.sample 。这将解决您的 2 个问题。
-
我认为数据集真的很大。熊猫可能不会有帮助
-
@Jean-FrançoisFabre:是的,你是对的,我没有注意到丢弃
f.readline()行。