首页 > 解决方案 > Python - Panda 在一个条件下将一个 csv 拆分为多个文件

问题描述

我有一个看起来像这样的 csv:

'-'  'd'  '5'
'-'  'd'  '9'
'-'  'v'  '15'
'-'  's'  '8'
'-'  's'  '10'
'-'  'q'  '3'

我想每次最后一列的数字减少时拆分数据框并保存到新文件中输出如下所示:
File1:

'-'  'd'  '5'
'-'  'd'  '9'
'-'  'v'  '15'

文件 2

'-'  's'  '8'
'-'  's'  '10'

文件 3

'-'  'q'  '3'

标签: pythonpandasdataframe

解决方案


为简单起见,我将假设您的 CSV 文件看起来像典型的 CSV 文件:

-,d,5
-,d,9
...

我还假设最后一列中的数字始终是正整数。

prev = 0
accumulatedLines = []
decreasedCount = 0
with open("my_file.txt", "r") as fin:
    for line in fin:
        values = line.split(",")
        if int(values[2]) < prev:
            with open("File{}.txt".format(decreasedCount + 1), "w") as fout:
                fout.writelines(accumulatedLines)
            decreasedCount += 1
            accumulatedLines = []

        accumulatedLines.append(line)
        prev = int(values[2])

本质上,我们遍历输入文件中的每一行,用逗号分隔符将其拆分,并跟踪前一行最后一列的值。我们还将读取的行累积到当前行。如果最后一列中当前行的值严格小于前一行,我们将累积的行写入一个新文件(以迄今为止我们遇到的递减值的次数命名)。然后我们清除累加器(并增加计数)。


推荐阅读