【问题标题】:Python: pandas.to_csv adds unwanted quotesPython:pandas.to_csv 添加不需要的引号
【发布时间】:2020-03-30 11:17:17
【问题描述】:

我用pd.read_csv读取一个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=" ")

除了旧 CSV 文件中的一行 MDESIGN "" 外,一切正常:

      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

有人知道如何预防吗?

【问题讨论】:

  • 能否提供一个来自您的 IDA 源文件中的违规行的示例,以及围绕上下文的几行?

标签: python pandas export-to-csv


【解决方案1】:

我对您的代码进行了一些调整,以帮助解决此问题(以粗体表示)并使事情对您来说更直接。

  • 更新了您的 for 循环以直接迭代您的 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

【讨论】:

    【解决方案2】:

    根据 pandas 文档,to_csv() 有一个 quotechar= 参数,默认为 ",也许您可​​以尝试另一个符号,例如 ~,作为引号字符(即 lisp1.to_csv('ida_lisp.ida', header=False, index=False, na_rep=" ", quotechar='~'))。通过这种方式,您可以测试问题是否纯粹源于引号字符而不是源于您的数据。

    【讨论】:

    • 这对mdesign"" 很有效。但是还有其他的" 被替换为~
    • 您必须找到适合您目的的引号字符,尝试将None 分配给引号字符或',即quotechar="'"
    猜你喜欢
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 2019-01-30
    • 2014-04-24
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    相关资源
    最近更新 更多