我肯定有更好的办法,但我一片空白。我有一个这种格式的CSV文件。对ID列进行排序,以便至少将所有内容分组在一起:
Text ID
this is sample text, AAAA
this is sample text, AAAA
this is sample text, AAAA
this is sample text, AAAA
this is sample text, AAAA
this is sample text2, BBBB
this is sample text2, BBBB
this is sample text2, BBBB
this is sample text3, CCCC
this is sample text4, DDDD
this is sample text4, DDDD
this is sample text5, EEEE
this is sample text5, EEEE
this is sample text6, FFFF
this is sample text6, FFFF
字符串
我想做的是快速地将CSV拆分为X数量的较小CSV文件。因此,如果X==3,则AAAA将进入“1.csv”,BBBB将进入“2.csv”,CCCC将进入“3.csv”,下一组将循环返回并进入“1.csv”。
这些组的大小不同,因此按数字进行硬编码的分割在这里不起作用。
有没有一种更快的方法来可靠地分割这些,然后我目前的方法只是使用Python中的Pandas groupby来编写它们?
file_ = 0
num_files = 3
for name, group in df.groupby(by=['ID'], sort=False):
file_+=1
group['File Num'] = file_
group.to_csv(file_+'.csv',index=False, header=False, mode='a')
if file_ == num_files:
file_ = 0
型
这是一个基于python的解决方案,但我对使用awk
或bash的东西持开放态度,如果它能完成工作的话。
编辑:
为了澄清,我想在一个固定数量的文件,我可以设置组分裂。
在这种情况下,3。(因此x = 3)。第一个组(AAAA)将进入1.csv,第二个进入2.csv,第三个进入3.csv,然后对于第四个组,它将循环返回并将其插入1.csv。等等。
示例输出1.csv:
Text ID
this is sample text, AAAA
this is sample text, AAAA
this is sample text, AAAA
this is sample text, AAAA
this is sample text, AAAA
this is sample text4, DDDD
this is sample text4, DDDD
型
示例输出2.csv:
Text ID
this is sample text2, BBBB
this is sample text2, BBBB
this is sample text2, BBBB
this is sample text5, EEEE
this is sample text5, EEEE
型
示例输出3.csv:
Text ID
this is sample text3, CCCC
this is sample text6, FFFF
this is sample text6, FFFF
型
5条答案
按热度按时间r3i60tvu1#
您可以使用此
awk
解决方案:字符串
uqdfh47h2#
在每个Unix机器上的任何shell中使用任何awk:
字符串
型
型
如果
X
是一个足够大的数字,你超过了你的系统限制,同时打开文件,你开始得到一个“太多打开的文件”错误,那么你需要使用GNU awk,因为它在内部处理这个问题,或者改变代码,一次只打开一个文件:型
或者实现您自己的方法来管理并发打开的文件数量。
编辑:以下是@PaulHodges在评论中的建议将导致这样的脚本:
型
0wi1tuuw3#
使用您显示的示例,请尝试以下代码。如上所述,考虑到最后一列按照所示样本进行排序。
字符串
u4dcyp6a4#
使用
groupby
和factorize
模所需组的数量(N
):字符串
输出文件:
型
计时
在1400万行上测试:
型
其中约14秒是由于I/O
与其他答案的比较(在shell中使用
time
):型
作为函数:
型
zazmityj5#
这里
字符串
您提供字符串作为第一个参数,但是
to_csv
method允许您提供类似文件的对象作为第一个参数,在这种情况下,您可能会避免多次执行与文件打开相关的操作,请考虑以下简单的比较型
给出输出
型
观察到第二种方式花费了第一种方式的大约75%的时间,因此虽然它更快,但仍然是相同的数量级。