Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.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 熊猫:将DF拆分为多个csv_Python_Pandas_Csv - Fatal编程技术网

Python 熊猫:将DF拆分为多个csv

Python 熊猫:将DF拆分为多个csv,python,pandas,csv,Python,Pandas,Csv,我有一个CSV文件,如下所示: |100|Header1|Header2| |120| xxx | xxx | |120| yyy | yyy | |120| zzz | zzz | |200|Header3|Header4| |220| xxx | xxx | |220| yyy | yyy | |220| zzz | zzz | |300|Header5|Header6| |320| xxx | xxx | |320| yyy |

我有一个CSV文件,如下所示:

|100|Header1|Header2|
|120| xxx   | xxx   |
|120| yyy   | yyy   |
|120| zzz   | zzz   |
|200|Header3|Header4|
|220| xxx   | xxx   |
|220| yyy   | yyy   |
|220| zzz   | zzz   |
|300|Header5|Header6|
|320| xxx   | xxx   |
|320| yyy   | yyy   |
|320| zzz   | zzz   |
所有的头文件都从一系列的100个开始,这些头文件需要拆分为单独的csv文件。因此,在本例中,将有3个csv文件,其中一个具有第100行和第120行,第二个csv文件具有第200行和第220行,第三个csv文件具有第300行和第320行


100、200和300行表示新表的开始。在pandas中是否有一种有效的方法可以做到这一点,而不必在遇到100、200等时循环并创建新的csv文件?

使用
groupby

df = pd.read_csv('test.txt',sep = '|',header=None)
df.drop([0,4],axis = 1,inplace = True)
for i,sd in df.groupby(df[1]//100):
    sd.to_csv(f'test{i*100}.csv',index=False,header=False)
test.txt包含OP提供的原始数据:

|100|Header1|Header2|
|120| xxx   | xxx   |
|120| yyy   | yyy   |
|120| zzz   | zzz   |
|200|Header3|Header4|
|220| xxx   | xxx   |
|220| yyy   | yyy   |
|220| zzz   | zzz   |
|300|Header5|Header6|
|320| xxx   | xxx   |
|320| yyy   | yyy   |
|320| zzz   | zzz   |
输出:

它将创建3个文件
test100.csv
test200.csv
test300.csv

test100.csv

100,Header1,Header2
120, xxx   , xxx   
120, yyy   , yyy   
120, zzz   , zzz 
test200.csv

200,Header3,Header4
220, xxx   , xxx   
220, yyy   , yyy   
220, zzz   , zzz   
test300.csv

300,Header5,Header6
320, xxx   , xxx   
320, yyy   , yyy   
320, zzz   , zzz   

我会考虑使用纯Python方法< /P>

with open('test.csv') as fh:
    current_file_handle = None
    current_file_name = None
    for line in fh.readlines():
        p0 = line.find('|') + 1
        p1 = line[p0:].find('|') + p0
        if current_file_name != f'{line[p0]}00':
            current_file_name = line[p0:p1]
            current_file_handle = open(f'test_{current_file_name}.csv', 'w')
        current_file_handle.write(line)
    current_file_handle.close()

Getting TypeError:/:'str'和'int'@dev的操作数类型不受支持这应该适用于您提供的文本文件的结构(所有管道
|
运算符和所有)。如果不是这样,请提供您拥有的原始文件的一部分。
100 | Header1 | Header2 | Header3 120 | Val1 | Val2 | Val3 120 | Val4 | Val5 200 | Header4 | Header5 220 | Val6 | Val7 220 | Val7 | Val8 220 | Val9 | Val10
@dev Ohh,删除我代码中的drop语句,它应该对您有用you@dev即使在移除后,如果它不起作用,或者有一些列留下了NA值,请编辑您的问题以包含这些数据,因为从注释中理解数据的结构有点困难。