繁体   English   中英

写入和读取csv文件时出现特殊字符(\\ r)的问题

[英]Problems with special characters (\r) when writing and reading csv files

我正在使用熊猫加载由excel创建的csv文件,进行一些分析,然后将结果保存到csv文件中。 我注意到熊猫的to_csv和from_csv方法似乎无法处理\\ r等特殊字符,但也不会引发任何错误。

In [7]: import pandas as pd

In [8]: data = {               
'A': ['one', 'two', 'three'],
'B': ['four', 'five', 'six']
}

In [9]: df = pd.DataFrame(data)

In [10]: df
Out[10]: 
       A     B
0    one  four
1    two  five
2  three   six

In [11]: df.loc[1,'A'] = 't' + '\r' + 'o'

In [12]: df
Out[12]: 
       A     B
0    one  four
1   t\ro  five
2  three   six

In [13]: df.to_csv("my_df.csv")

In [14]: df2 = pd.DataFrame.from_csv("my_df.csv")

In [15]: df2
Out[15]: 
       A     B
0    one  four
1      t   NaN
o   five   NaN
2  three   six

因为我在这里没有指定任何编码,所以我假设它使用的是ASCII,但是即使我在编写和读取中指定encoding ='utf-8'时,我也会得到相同的结果。

如何编写健壮的csv读写脚本,以使行/列不损坏或发生其他意外情况? 如果唯一的解决方案是在写入csv之前检查并“清理”每个字符串,那么最简单的方法是什么?

除非有人有更好的建议,否则我将按照以下方式处理特定问题-通过在加载Pandas之前预处理每个csv文件。 它似乎可以在我当前的系统上运行,但不能确信它是可靠的证明。

In [30]: f = open("my_df.csv")

In [31]: content = f.read().replace('\r',' ')

In [32]: with open("my_df2.csv", "w") as g:
   ....:     g.write(content)
   ....:     

In [33]: df2 = pd.DataFrame.from_csv("my_df2.csv")

In [34]: df2
Out[34]: 
       A     B
0    one  four
1    t o  five
2  three   six

预处理可能是最好的选择。 但是,如果您要查找其他内容,则可以在read_csv尝试使用lineterminator参数:

df = pd.read_csv("my_df.csv", index_col=0, lineterminator='\n')

(在Linux上对我有用,但不能保证在其他平台上使用。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM