在pandas中保持字段中含引号的文件原样不变
我尝试了很多方法,但就是无法把输入文件中的引号保留到输出文件里。
可以复现的代码:
# Input file
csv_data = '''A,B,C,D,E
234,mno,C22,U,
567,pqr,"C3""",U,5555
999,abc,"C99",D,9999
'''
# Load CSV data into dataframes
df = pd.read_csv(StringIO(csv_data), header=0, dtype=str, keep_default_na=False, engine='python', sep=',')
df.to_csv('output.txt', sep=',', index=False, header=True)
现在,output.txt 的内容是:
A,B,C,D,E
234,mno,C22,U,
567,pqr,"C3""",U,5555
999,abc,C99,D,9999
我希望的输出是:
A,B,C,D,E
234,mno,C22,U,
567,pqr,"C3""",U,5555
999,abc,"C99",D,9999
我就是不想在保存的时候丢失输入数据中的任何东西,包括引号。
1 个回答
2
在使用 pd.read_csv
和 df.to_csv
这两个函数时,可以添加一个叫做 quoting
的参数,并把它设置为 3
(也就是 QUOTE_NONE
)。这样做的目的是为了控制如何处理文本中的引号。
# Load CSV data into dataframes
df = pd.read_csv(StringIO(csv_data),
header=0,
dtype=str,
keep_default_na=False,
engine='python',
sep=',',
quoting=3)
print (df)
A B C D E
0 234 mno C22 U
1 567 pqr "C3""" U 5555
2 999 abc "C99" D 9999
print (df.to_csv(sep=',', index=False, header=True, quoting=3))
A,B,C,D,E
234,mno,C22,U,
567,pqr,"C3""",U,5555
999,abc,"C99",D,9999
df.to_csv('output.txt', sep=',', index=False, header=True, quoting=3)