Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在大熊猫中按几行拆分csv_Python_Pandas_Csv - Fatal编程技术网

Python 在大熊猫中按几行拆分csv

Python 在大熊猫中按几行拆分csv,python,pandas,csv,Python,Pandas,Csv,我有一个带有几行标题的csv文件。接下来我得到了一个示例(1)数据,接下来是标题和示例(2)数据。文件中的样本(和标头)数量不是常量 DF看起来像这样: [标题] 资讯地图:4214 资讯样本:3122 内容:,,22分米 样本名称、样本id、样本电话、样本项目 全日空22785A6659 全日空22785A658141 全日空22 785 csd449 本23756A6659 本23756A658141 查理44733C658141 [标题] 资讯地图:423421 资讯样本:315 内容,5

我有一个带有几行标题的csv文件。接下来我得到了一个示例(1)数据,接下来是标题和示例(2)数据。文件中的样本(和标头)数量不是常量

DF看起来像这样:

[标题]
资讯地图:4214
资讯样本:3122
内容:,,22分米
样本名称、样本id、样本电话、样本项目
全日空22785A6659
全日空22785A658141
全日空22 785 csd449
本23756A6659
本23756A658141
查理44733C658141
[标题]
资讯地图:423421
资讯样本:315
内容,562dmm
样本名称、样本id、样本电话、样本项目
Cris 82 7835 a6659
Cris 82 7485 a658141
Cris 82 7485 csd449
马特53 268 a6659
马特53 268 a658141
丹42 885 c658141
我想做的是: 我需要将每个标题与示例一起拆分到新文件。因此,在上述情况下,我应该得到2个文件:

文件1:

[标题]
资讯地图:4214
资讯样本:3122
内容:,,22分米
样本名称、样本id、样本电话、样本项目
全日空22785A6659
全日空22785A658141
全日空22 785 csd449
本23756A6659
本23756A658141
查理44733C658141
文件2:

[标题]
资讯地图:423421
资讯样本:315
内容,562毫米
样本名称、样本id、样本电话、样本项目
Cris 82 7835 a6659
Cris 82 7485 a658141
Cris 82 7485 csd449
马特53 268 a6659
马特53 268 a658141
丹42 885 c658141
如何在pandas或核心Python中以最简单的方式实现它?正如我所说,标题和示例的数量不是恒定的

我试了一圈:

  • 正在查找行中的[标题]
  • 保存所有[标题]行的编号索引编号
  • “打开”时,我试图将所有隔室保存到新文件中
问题是:我无法将其作为csv读取,因为它是一列数据帧(因为标题),而该行的读取方式很奇怪,因为我有混合样本的文件

我在找一个更好的主意。也许熊猫有一些我不知道的功能。如果没有,我会继续用我的方式做事,并尝试这样做


我不一定要寻找现成的解决方案,而是一些提示或概念

根据我在注释中给出的逻辑,这里是psuedocode示例代码,假设“InfoMap”是header的起点:

dataList = []
with open('YourData.csv', newline='') as File:  
        reader = csv.reader(File)
        dataList = []
        count = 0
        for row in reader:
            if "InfoMap" in row[0]:
                count += 1
                if count > 1:
                    #fileName = "file" + str(count)
                    #WriteDataListToCSV(dataList, fileName) create a function that can write dataList into csv 
                    #print(dataList)
                    dataList = []
                    dataList.append(row)
                else:
                    dataList.append(row)
            else:
                dataList.append(row)
        #fileName = "file" + str(count)
        #WriteDataListToCSV(dataList)  
        #print(dataList)
您可以取消对print语句的注释,以查看dataList包含的是另一个psedocode(或bug real代码)。唯一的变化是不将数据写入列表

file_no = 0
write_file = open(f"sub_file_{file_no}.csv", "a+")
with open("input.csv") as in_file:
    reader = csv.reader(in_file)
    for row in reader:
        if row[0] == "[header]":
            # At the start of a new file. Close the old, increment count, open new
            write_file.close()
            file_no += 1
            write_file = open(f"sub_file_{file_no}.csv", "a+")
        # Just pass current row into the currently open file
        write_file.write(row)
write_file.close()

请分享您已经尝试过的代码。使用python CSV模块读取CSV文件,然后循环遍历每一行,将行数据保存在列表中,并检查“InfoMap”的计数。如果计数大于1或达到最后一行,则将列表写入另一个CSV文件名file1、file2。。。文件添加了伪代码,因为我删除了我的概念。如果你使用的是大文件,那么直接将数据写入目标文件而不是存储在中间列表中是值得的。这样你就不会增加你的记忆。但对于小文件来说,这并不重要。