Pandas: 请求 DataFrame.to_tsv() 以读取制表符分隔的文本

创建于 2015-06-11  ·  16评论  ·  资料来源: pandas-dev/pandas

我提出了一个函数,可以在 DataFrame 上调用,命名为 to_tsv 或 to_table。 该函数等效于带有参数sep='\t'to_csv() #$ 。 虽然to_tsv()包含编写 tsv 文件的功能,但我发现总是必须指定一个附加参数很烦人。 我更喜欢 tsv 文件而不是 csv 文件,因为选项卡很少出现,因此减少了转义的需要。 我还发现纯文本渲染更具可读性。 我担心缺少专用的to_tsv()函数会鼓励使用 csv 而不是 tsv。 当前read_table()默认为制表符分隔符,但没有等效的写入功能。

IO CSV

最有用的评论

+1。 作为从业者,我非常感谢to_tab糖。

所有16条评论

除了to_csv(sep='\t')之外, to_tsv函数还应考虑更改默认引用,因为 tsv 文件不需要引用。

pandas API 已经充斥着大量很少使用的便捷方法。 我真的不认为添加另一个是一个好主意。

我在这里同意@shoyerto_csv中的所有功能都可以做到这一点,并且鉴于我们已经有很多方法,我认为添加新方法的原因应该比能够提供其他默认值更强大。

我要结束这个(我们有太多未解决的问题..),但如果需要,讨论当然可以继续。

+1。 作为从业者,我非常感谢to_tab糖。

我认为添加新的原因应该比能够提供其他默认值更强大。

IMO 的便利是有道理的(人们倾向于编写许多文本文件,因此to_csv必须不断地补充参数)。

但是,我的主要动机是鄙视 CSV 格式。 看到人们仍在使用 CSV 而不是 TSV,我感到很痛苦。 显然,excel/数据库支持可以发挥作用。 但是像 pandas 这样的项目应该努力使最佳实践最容易实施。

尽管目前这对我来说不是主要问题,但csv以美国/英联邦代表为中心,国际上不知道。 由于接受 UTF 和国际化的所有 Pythonic 哲学,制表符分隔必须优先于 csv / 分号-sv。

虽然我可以理解@shoyer提出的观点,但我同意@dhimmel。 根据我的经验,TSV 比 CSV 更像是一种标准的数据分析格式。 有许多用例要求 TSV 格式,而我对 CSV 格式不熟悉(这里有几个常见用法示例)。 TSV 的另一个优势在于原始文本易于阅读,并避免了 @dhimmel 提到的引用问题。

我只是略微反对添加to_tsv 。 以我的经验(在美国),CSV 比 TSV 更常见(至少在文件格式的名称上),但只有一点点。 to_tsv的主要优点是它的名称可以立即明确它的作用。

CSV 和 TSV 在数据科学中都得到了很好的支持和广泛使用。 CSV 更像是一种遗留格式,因此许多向后关注的项目默认使用 CSV。 但是,我认为前瞻性项目应该默认使用 TSV,因为它更适合数据科学。 由于 pandas 中没有默认的to_text_delimited_file输出函数,因此to_csv是事实上的默认值。 由于大多数用户不太关心手动指定sep='\t' ,因此 pandas 导致 CSV 比 TSV 更流行,并延迟了高级格式的兴起。

请原谅我对此事的无知,但除了作为人类更容易阅读之外,当且仅当列标题与其相应数据具有大致相同的字符(并非总是如此)时,TSV 比 CSV 提供什么优势? 老实说,我很好奇两者之间是否存在性能差异,我现在使用 TSV,但老实说只是因为我正在使用的数据文件采用这种格式,所以我将它们保留为相同的格式。

与 CSV 相比,TSV 提供了哪些优势?

@Starkiller4011选项卡是更自然的柱状数据分隔符。 它们需要较少的引用,因为值很少包含制表符,但通常包含逗号。

老实说,好奇两者之间是否存在性能差异

我希望性能差异是微不足道的。 然而,就像数据科学中的大多数事情一样,真正重要的性能类型是程序员的效率。 而且我认为 TSV 比 CSV 更易于使用。

并非所有人都同意制表符分隔优于 csv——例如,我不同意。

作为 Python 程序员,我们知道空格并不总是在不同的操作中保留,比如复制和粘贴。 例如,我们这些回答很多关于 SO 问题的人经常不得不使用sep="\s\s+"来解析人们以空格分隔格式转储的文本,我们必须希望他们已经放置了足够的空格列之间以使其正常工作。 如果他们使用逗号,或分号,或管道,或其他东西,这不会是一个问题。 (我只是想到了克拉,它曾经在某些领域被广泛使用。)

如果我们想添加一个to_tsv别名让一些人更快乐,好吧。 但是,我们不要假装在使用 TSV 时没有自己的麻烦,我能想到的唯一优势就是引用更少。

我认为值得退后一步,认识到像to_csv这样的函数有点傻,解决方案应该是一个更通用的to_table函数,它需要指定一个分隔符,并且to_csv只是一个方便的包装。 R 在它的write.table()函数中具有此功能,这更有意义。

作为记录,我认为 CSV 和 TSV 以及可接受的良好格式。 他们都应该得到支持。 @dsm054为非空白分隔符带来了一些引人注目的优势。

在我看来,更大的问题是不加选择地使用.csv扩展名(例如,在提到 TSV 时)。 请参阅https://github.com/pandas-dev/pandas/pull/14587 上的讨论。 我同意@stevekm的观点,即to_table应该是一个通用函数,您应该在其中指定分隔符,而to_csvto_tsv应该关注这些标准。 以向后兼容的方式解决这个问题需要一些先见之明。 但至少 pandas 2 应该考虑沿readr行的函数名称。

刚开始使用来自 R + tidyverse/readr 的 pandas 数据帧,我印象最深的第一件事是缺乏一致的读/写方法,例如:

read_csv()/write_csv():逗号分隔 (CSV) 文件
read_tsv()/write_tsv():制表符分隔文件
read_delim()/write_delim():通用分隔文件
read_fwf()/write_fwf():固定宽度文件
read_table()/write_table():表格文件,其中列用空格分隔。
read_log()/write_log():网络日志文件

在从事基因组学数据科学的 20 年中,我从未遇到过 csv 文件,大多数数据以 tsv(或空格分隔)格式存在。 至少可以说,必须使用 df.to_csv() 指定 sep 和引用参数来编写 tsv(或空格分隔)文件是不方便的。

将 df.read_tsv() df.to_tsv() 用于制表符分隔的文件,将 df.read_table() df.to_table() 用于空格分隔的文件,这对于从 R 到 pandas 的人来说非常有帮助。

从 pandas 0.24 开始,现在已弃用read_table (请参阅 https://github.com/pandas-dev/pandas/issues/21948 / https://github.com/pandas-dev/pandas/pull/ 21954)。 由于我一直在使用read_table来代替缺少read_tsv ,因此我现在得到了很多:

FutureWarning: read_table is deprecated, use read_csv instead, passing sep='\t'.

从好的方面来说,删除read_table确实可以更直接地添加read_tsvto_tsv函数,尽管根据https://github的趋势正在转向便利函数

此页面是否有帮助?
0 / 5 - 0 等级