我有一个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和120s,第二个csv文件具有200和220s,第三个具有300和320s。
第100、200和300行表示新表的开始。有没有一种有效的方法可以在pandas中做到这一点,而不必遍历并在遇到100、200等情况下创建新的csv文件?
发布于 2021-03-17 13:25:29
使用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   发布于 2021-03-17 13:55:31
我会考虑使用纯python方法。
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()https://stackoverflow.com/questions/66667053
复制相似问题