Pandas:将分隔符值传递给 read_csv(),这样,其中 1 列将被忽略

Posted

技术标签:

【中文标题】Pandas:将分隔符值传递给 read_csv(),这样,其中 1 列将被忽略【英文标题】:Pandas:Passing a delimiter value to read_csv(), such that, it is ignored for 1 of the columns 【发布时间】:2018-10-30 09:58:26 【问题描述】:

我从 Kaggle 获得了泰坦尼克号火车数据集,我正在尝试将其导入 pandas 数据框中。以下是数据集中的一些记录:

PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked

2,1,1,"卡明斯,约翰·布拉德利夫人(佛罗伦萨布里格斯 Thayer)",女,38,1,0,PC 17599,71.2833,C85,C

3,1,3,"Heikkinen, Miss. Laina",female,26,0,0,STON/O2. 3101282,7.925,,S

我想将它导入到 pandas 数据框,这样名称字段值中的逗号(包含在双引号下)不被视为分隔符,并且该列不会在该逗号处拆分。 例如,对于上面示例中的第二条记录,名称字段具有值-“Heikkinen, Miss. Laina”被视为单个值,并且不会在 HeikkinenMiss 之间的逗号处拆分.莱娜

【问题讨论】:

【参考方案1】:

来自https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.htmlpandas 文档:

quotechar : str(长度为 1),可选

用于表示引用项的开始和结束的字符。引用的项目可以包含分隔符,它将被忽略。

引用:int 或 csv.QUOTE_* 实例,默认为 0

控制每个 csv.QUOTE_* 常量的字段引用行为。使用 QUOTE_MINIMAL (0)、QUOTE_ALL (1)、QUOTE_NONNUMERIC (2) 或 QUOTE_NONE (3) 之一。

双引号:布尔值,默认为真

当指定quotechar且quoting不是QUOTE_NONE时,指示是否将字段内的两个连续quotechar元素解释为单个quotechar元素。

所以我建议在调用 read_csv 时指定 quotechar。

【讨论】:

感谢您的回答。即使在使用 quotechar 之后我面临的问题是数据矩阵向左移动,即在上面的示例中,对于第二条记录,PassengerId 被视为 1(而不是 3),Survived 被视为 3(而不是1), Pclass 是“Heikkinen and Name is Miss. Laina”。其余所有 Header 元素和数据都对齐,因为这里忽略了 quotechar。我不确定哪里出了问题。 @AyushGiri 你能告诉我你从哪里得到数据吗?所以我可以试试…… 这是 kaggle.com 上可用于预测竞赛“泰坦尼克号:灾难中的机器学习”的火车数据集。这是页面的链接-kaggle.com/c/titanic/data 下载“train.csv”数据集 问题已解决。显然,当您在 'sep' 参数中使用正则表达式时, read_csv() 会忽略 'quotechar' 参数。我在 sep 参数中使用了 '\s*,\s*' ,因此出现了问题。但是,我仍然不明白为什么会这样,或者当 sep 参数中的正则表达式和 quotechar 都需要时如何进行?感谢您的宝贵时间!

以上是关于Pandas:将分隔符值传递给 read_csv(),这样,其中 1 列将被忽略的主要内容,如果未能解决你的问题,请参考以下文章

Pandas.read_csv:需要反斜杠分隔符?

Pandas read_csv dtype 读取所有列,但很少作为字符串读取

尾随分隔符使熊猫 read_csv 感到困惑

pandas.read_csv 不在分号分隔符处对数据进行分区

使用 pandas.read_csv 读取带有空格的 CSV 文件作为千位分隔符

在 Python Pandas 中使用多个字符分隔符 read_csv