запись в несколько файлов построчно - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть пример кадра данных

first   second
1       3
2       4
5       6

Я перебираю строку данных по строкам, выполняя вычитание и сложение. Я хочу записать результаты в новые CSV-файлы, соответственно, построчно. Я не уверен, как я могу писать в несколько файлов CSV напрямую.

Для одного файла я использую что-то вроде

with open(subtract_output_file, "w") as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    for row in df.iterrows():
        a = row[1][0]
        b = row[1][1]
        writer.writerow(a-b)

Я хочу записать вывод сложения одновременно в другой файл, так как я не хочу читать ввод дважды.

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Вы можете открыть несколько файлов одновременно, выполнив:

with open(output_file_1, 'w') as f1, open(output_file_2, 'w') as f2:
    do_something()

Так что для вашего кода это будет что-то вроде ...

with open(subtract_output_file, "w") as csvsub, open(addition_output_file, 'w') as csvadd:
    writersub = csv.DictWriter(csvsub, fieldnames=fieldnames)
    writeradd = csv.DictWriter(csvadd, fieldnames=fieldnames)
    writersub.writeheader()
    writeradd.writeheader()
    for row in df.iterrows():
        a = row[1][0]
        b = row[1][1]
        writersub.writerow(a-b)
        writeradd.writerow(a+b)

Это может быть не самым эффективный способ, но должен работать.

0 голосов
/ 30 апреля 2020

Зачем использовать pandas и не воспользоваться его преимуществом? Всего четыре команды очистки:

plus  = df["first"] + df["second"]
minus = df["first"] - df["second"] 

plus .to_csv("addition_output_file", header=["plus"],  index=False)
minus.to_csv("subtract_output_file", header=["minus"], index=False)
  • Векторизация + и - намного быстрее, чем ваши for l oop.

  • Метод серии '.to_csv() выполняет всю «грязную» работу.

  • Нет необходимости записывать строку за строкой одновременно - нет чтения входных данных дважды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...