【发布时间】:2019-06-28 18:50:06
【问题描述】:
我有一个带有几行标题的 csv 文件。接下来我得到一个样本(1)数据,接下来是标题和样本(2)数据。样本(和标题)的数量在文件中不是恒定的。
DF 看起来像这样:
[header]
InfoMap : 4214
InfoSample:3122
Content:, ,22dmm
Sample_name, Sample_id, Sample_phone, Sample_project
Ana 22 785 a6659
Ana 22 785 a658141
Ana 22 785 csd449
Ben 23 756 a6659
Ben 23 756 a658141
Charlie 44 733 c658141
[header]
InfoMap : 423421
InfoSample:315
Content, ,562dmm
Sample_name, Sample_id, Sample_phone, Sample_project
Cris 82 7835 a6659
Cris 82 7485 a658141
Cris 82 7485 csd449
MATT 53 268 a6659
MATT 53 268 a658141
Dan 42 885 c658141
我尝试做的事情: 我需要将带有样本的每个标题拆分为新文件。所以在上面的情况下,我应该得到 2 个文件:
文件1:
[header]
InfoMap : 4214
InfoSample:3122
Content:, ,22dmm
Sample_name, Sample_id, Sample_phone, Sample_project
Ana 22 785 a6659
Ana 22 785 a658141
Ana 22 785 csd449
Ben 23 756 a6659
Ben 23 756 a658141
Charlie 44 733 c658141
文件2:
[header]
InfoMap : 423421
InfoSample:315
Content, ,562dmm
Sample_name, Sample_id, Sample_phone, Sample_project
Cris 82 7835 a6659
Cris 82 7485 a658141
Cris 82 7485 csd449
MATT 53 268 a6659
MATT 53 268 a658141
Dan 42 885 c658141
如何在 pandas 或核心 Python 中以最简单的方式做到这一点?正如我所说,标题和样本的数量不是恒定的。
我通过循环尝试了:
- 在行中寻找 [header]
- 保存所有 [header] 行索引号的编号。
- 通过“打开”我尝试将所有隔间保存到新文件中
问题是:我无法将其读取为 csv,因为它是一列数据帧(因为标题),行以一种奇怪的方式读取,因为我的文件包含混合样本。
我正在寻找更好的概念。也许 Pandas 有一些我不知道的功能。如果没有,我会继续我的做事方式,并尝试这样做。
我不一定要寻找现成的解决方案,而是一些提示或概念。
【问题讨论】:
-
请分享您已经尝试过的代码。使用python CSV模块读取csv文件,然后遍历每一行,将行数据保存在列表中,如果计数大于1或达到最后一行,则检查“InfoMap”的计数,然后将列表写入另一个csv文件名称 file1, file2 ... filen_N
-
添加了伪代码因为我删除了我的概念。它确实有效。
-
如果您正在处理大文件,可能值得将数据直接写入目标文件,而不是存储到中间列表中。这样你就不会增加你的记忆负担。不过,对于小文件,这无关紧要。