Pandas.read_csv ParserError '§' 应在 '“' 之后,sep = ”§”

Pandas.read_csv ParserError '§' expected after '"' with sep = "§"

提问人:sveer 提问时间:10/11/2023 最后编辑:sveer 更新时间:10/11/2023 访问量:52

问:

我有一个问题,需要很多时间才能解决。read_csv

我正在处理具有多个特殊字符的文本,因此我正在检查哪个字符不在文本列表中,并在编写使用相应 ID 分隔文本的文件时选择 § 作为分隔符。csv

但是,在读取文件时,我收到以下错误。我可以跳过不好的行,但在这种情况下,我不能丢失任何文本。

ParserError: '§' expected after '"'

写作

df.to_csv('20231010.csv',
           index=False,
           sep='§',
           #header=None,
           quoting=csv.QUOTE_NONE,
           quotechar="",
           escapechar=" ")

读数

data = pd.read_csv('20231010.csv',  sep ="§", encoding='utf-8')
python pandas 解析错误 读取 csv

评论

3赞 mozway 10/11/2023
请提供触发错误的文件的可重现示例
1赞 mozway 10/11/2023
另外,为什么要在导出中禁用引用?您实际上可以使用文本中的字符,您只需要正确转义它即可。这种情况在默认的情况下一直发生,
0赞 sveer 10/11/2023
如果我知道是什么触发了错误,我会的。我在data.frame中有40K文本。
1赞 DeepSpace 10/11/2023
如果您所做的只是稍后将其读回数据帧,您是否考虑过使用任何其他数据格式,例如 pickle(pandas 原生支持 via 和 )?csvto_pickleread_pickle
2赞 mozway 10/11/2023
@sveer保留默认值,CSV 可以转义字符,请参见下文。如果它没有坏,就不要修理它

答:

1赞 mozway 10/11/2023 #1

禁用引用是没有意义的,实际上您甚至不需要使用花哨的字符,只需使用默认设置即可:

df = pd.DataFrame({'text1': ['abc"123§', 'def ,456'],
                   'text2': ['ghi`789', 'jkl|123'],
                  })

df.to_csv('20231010.csv', index=False)

CSV格式:

text1,text2
"abc""123§",ghi`789
"def ,456",jkl|123

再次导入:

df2 = pd.read_csv('20231010.csv')
print(df2)

输出:

      text1    text2
0  abc"123§  ghi`789
1  def ,456  jkl|123

Pandas 可以相对很好地导入/导出 CSV 文件,而无需更改。可能导致更改的最常见情况是:

  • 索引的默认包含,该索引将转换为列to_csvread_csv
  • 将特定字符串转换为 NaN(例如 /),如果这些字符串在您的上下文中具有不同的含义,这可能会很烦人NULLNA

您可以通过在 to_csv 中使用(就像您所做的那样)和在 read_csv 中使用来避免这些问题。index=Falsekeep_default_na=False