Python:pandas.to_csv 添加不需要的引号
Python: pandas.to_csv adds unwanted quotes
我用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
有谁知道如何防止这种情况发生?
根据 pandas 文档,to_csv()
有一个 quotechar=
参数,默认为 "
,也许你可以尝试另一个符号,比如 ~
,对于引号字符(即 lisp1.to_csv('ida_lisp.ida', header=False, index=False, na_rep=" ", quotechar='~')
)。这样您就可以测试问题是否纯粹是由于引号字符而不是您的数据引起的。
我对您的代码做了一些调整以帮助解决这个问题(在 粗体 中)并使事情对您来说更直接一些。
- 更新了您的
for
循环以直接迭代您的 list
,而不是与 range(len())
调用打交道。
- 添加了一个
replace
函数来替换字符串中的任何杂散 "
。
- 添加了一个
strip
函数来清理所有值以删除任何 leading/trailing 空格,以便输出 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
我用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
有谁知道如何防止这种情况发生?
根据 pandas 文档,to_csv()
有一个 quotechar=
参数,默认为 "
,也许你可以尝试另一个符号,比如 ~
,对于引号字符(即 lisp1.to_csv('ida_lisp.ida', header=False, index=False, na_rep=" ", quotechar='~')
)。这样您就可以测试问题是否纯粹是由于引号字符而不是您的数据引起的。
我对您的代码做了一些调整以帮助解决这个问题(在 粗体 中)并使事情对您来说更直接一些。
- 更新了您的
for
循环以直接迭代您的list
,而不是与range(len())
调用打交道。 - 添加了一个
replace
函数来替换字符串中的任何杂散"
。 - 添加了一个
strip
函数来清理所有值以删除任何 leading/trailing 空格,以便输出 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