Python: pandas .to_csv добавляет нежелательные цитаты - PullRequest
2 голосов
/ 30 марта 2020

Я читаю файл CSV с pd.read_csv, как показано:

lisp = pd.read_csv('ida_lisp.ida', header=None, skip_blank_lines=False)

Я заменяю %1% на значения ключа и сохраняю результат в разных местах, как показано:

heating_setpoint_s = [19, 20, 21, 22, 23, 24] 
for i in range(len(heating_setpoint_s)):
    lisp1 = lisp.replace('%1%', str(heating_setpoint_s[i]), regex=True)
    path = "C://Users//nico//"+str(i+1)+"_ida"
    os.chdir(path)
    lisp1.to_csv('ida_lisp.ida', header=False, index=False, na_rep=" ")

Все работает нормально, за исключением одной строки MDESIGN "" в старом CSV-файле:

      K2 0.0
      TAU 1.0
      SPECPUMPPO 349.0
      MDESIGN ""

  MODULE chil
    TYPE SIMCHIL
      NFPLR 0
      COP 3

изменяется после сохранения на:

      K1 0.0
      K2 0.0
      TAU 1.0
      SPECPUMPPO 349.0
"      MDESIGN """""

  MODULE chil
    TYPE SIMCHIL
      NFPLR 0
      COP 3

Кто-нибудь знает, как это предотвратить?

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Я внес пару изменений в ваш код, чтобы помочь решить эту проблему ( полужирный ) и сделать некоторые вещи более понятными для вас.

  • Обновлено ваш for l oop для итерации вашего list напрямую, а не для свертки с вызовом range(len()).
  • Добавлена ​​функция replace для замены любого паразитного " в вашем строки.
  • Добавлена ​​функция strip для очистки всех значений для удаления любых начальных / конечных пробелов, чтобы выходной CSV был чистым.
  • Обновлена ​​конкатенация пути к файлу для использования os.path.join.
  • Добавлен вызов os.makedirs на случай, если каталог вашего хранилища не существует.

Пример кода:

import os
import pandas as pd

lisp = pd.read_csv('ida_lisp.ida', header=None, skip_blank_lines=False)

heating_setpoint_s = [19, 20, 21, 22, 23, 24] 
for i in heating_setpoint_s:
    lisp1 = lisp.replace('%1%', str(i), regex=True).replace('"+', '', regex=True)
    # Clean column 0, assuming this is the only column, based on sample data provided.
    lisp1 = lisp1.iloc[:, 0].str.strip()
    path = "C:/Users/nico/{}_ida".format(i)
    if not os.path.exists(path):
        os.makedirs(path)
    lisp1.to_csv(os.path.join(path, 'ida_lisp.ida'), header=False, index=False, na_rep="")

Ввод из CSV

      K2 0.0
      TAU 1.0
      SPECPUMPPO 349.0
      MDESIGN ""

  MODULE chil
    TYPE SIMCHIL
      NFPLR 0
      COP 3

Вывод:

K2 0.0
TAU 1.0
SPECPUMPPO 349.0
MDESIGN

MODULE chil
TYPE SIMCHIL
NFPLR 0
COP 3
1 голос
/ 30 марта 2020

Согласно документации pandas, to_csv() имеет параметр quotechar=, который по умолчанию равен ", возможно, вы можете использовать другой символ, скажем ~, для кавычки (т.е. lisp1.to_csv('ida_lisp.ida', header=False, index=False, na_rep=" ", quotechar='~')). Таким образом, вы можете проверить, не связана ли проблема исключительно с кавычками, а не с вашими данными.

...