【问题标题】:Reading csv from pandas having both quotechar and delimiter for a column value从具有引号字符和分隔符的熊猫中读取 csv 作为列值
【发布时间】:2016-06-11 17:55:00
【问题描述】:

这是 csv 文件“test.csv”的内容,我正在尝试通过 pandas read_csv() 读取它

"col1", "col2", "col3", "col4"
"v1", "v2", "v3", "v4"
"v21", "v22", "v23", "this, "creating, what to do? " problems"

这是我正在使用的命令 -

messages = pd.read_csv('test.csv', sep=',', skipinitialspace=True)

但我收到以下错误 -

CParserError: Error tokenizing data. C error: Expected 4 fields in line 3, saw 5

我希望第 3 行中第 4 列的内容是“这个,”创建,要做什么?“问题”

当一列可以包含引号字符和分隔符时如何读取文件?

【问题讨论】:

  • 问题是您的 csv 似乎格式不正确。 Pandas 将允许您将" 用作quotechar,但您的列中有未转义的引号字符。如果您的第三行改为"v21", "v22", "v23", "this, \"creating, what to do? \" problems",您可以使用\ 作为escapechar,这样就可以了。
  • csv 不是我生成的,所以无法控制。
  • 对我有用的一个选项是使用 '",' 作为分隔符,但这需要额外的列清理步骤以删除其他 "

标签: python csv pandas data-manipulation


【解决方案1】:

pandas 不允许您保留格式错误的行,老实说,我并没有真正看到忽略某些 " 字符的方法,但在您的示例中却没有。我认为您使用'", "' 作为分隔符然后进行清理的直觉是最好的方法。如果您真的担心在一行中执行此操作:

message = pd.read_csv('test.txt', sep='", "', names = ['col1','col2','col3','col4'], skiprows=1).apply(lambda x: x.str.strip('"'))

它也处理列名中的引号并为您提供:

>>> message
>>> 
  col1 col2 col3                                     col4
0   v1   v2   v3                                       v4
1  v21  v22  v23  this, "creating, what to do? " problems

【讨论】:

  • @ragesz 你能澄清你的问题吗?您的意思是“如果不引用列标签怎么办?”或“如果某些列包含未引用的值怎么办?”
  • 我遇到了this 的问题,我正在寻找解决方案,但没有找到,所以最后我问了,得到了答案。
猜你喜欢
  • 2022-11-24
  • 1970-01-01
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
  • 1970-01-01
  • 2014-08-27
相关资源
最近更新 更多