制表分隔文件到熊猫

Posted

技术标签:

【中文标题】制表分隔文件到熊猫【英文标题】:tabulation separated file into pandas 【发布时间】:2017-10-29 18:09:26 【问题描述】:

下午好,

在我的问题Reading csv like file to pandas 之后,我还有一个更棘手的问题。

我试图阅读的 excel 电子表格由制表符分隔,并有一列带引号。我正在尝试使用 quotechar 参数来避免意外的列,但它似乎不起作用,因为分隔符是正则表达式

我的代码如下,如果有帮助的话:

umm2017=pd.read_csv(r'0\DonneesIndisponibilitesProduction_2017.xls'.format(path_temp),sep = r"\t",encoding='iso-8859-2', quotechar = "'") umm2017 = umm2017.drop(umm2017.index[len(umm2017) - 1]) umm2017.to_csv(r'\umm_rte_2017.csv'.format(path_output), index = 'False')

我想用 pandas 阅读的 excel 在这里

example

我要解析的文件可以在这里找到,在底部https://clients.rte-france.com/lang/fr/visiteurs/vie/prod/indisponibilites.jsp

编辑:花了一个下午试图理解;所以C引擎似乎不支持quotchar,这是我唯一可以使用的,因为我的文件使用正则表达式作为sep。我试图从原始文件中删除所有连字符,但它不起作用。

这是我得到的输出 csv;有一些额外的行把事情搞砸了:

非常感谢

【问题讨论】:

它在 python 控制台中的外观如何?如果它在那里看起来没问题,那么问题可能在于编写它。如果将sep=r'\t' 添加到to_csv 会发生什么? 我在控制台中确实有同样的问题,数据框中有奇怪的行,甚至将分隔符添加到“to_csv”函数也不起作用。我想知道它是否来自原始文件本身,当我用记事本++打开它时,我已经看到了额外的行。感觉这个问题没有办法解决! 意识到我从您的链接中选择了一个碰巧没有出现问题的文件。切换到另一个并能够重现它。 【参考方案1】:

作为一种解决方法,为避免pd.read_csv 将长度超过一个字符的分隔符解释为正则表达式并导致引用问题,您可以先将\t 替换为另一个字符,然后将其提供给pd.read_csv

例如,对于您链接中的 2014 年文件,; 似乎可以工作:

import io
import pandas as pd
with open(fileloc, encoding='iso-8859-2') as file:
    data = file.read().replace('\t', ';')
pd.read_csv(io.StringIO(data), sep=';').to_csv(newfileloc, encoding='iso-8859-2', index=False)

【讨论】:

以上是关于制表分隔文件到熊猫的主要内容,如果未能解决你的问题,请参考以下文章

无法将制表符分隔的 Txt 文件从 S3 加载到 Redshift

vbscript 将访问查询导出到制表符分隔文件不起作用

如何将制表符分隔的文本文件导入 Excel?

将大制表符分隔文件读入R [重复]

从制表符分隔的文本文件中读取日期

制表符分隔文本的复制粘贴会导致 Excel 中出现奇怪的格式?