Pandas to_csv(sys.stdout) 在我的环境下不起作用

Posted

技术标签:

【中文标题】Pandas to_csv(sys.stdout) 在我的环境下不起作用【英文标题】:Pandas to_csv(sys.stdout) doesn't work under my environment 【发布时间】:2018-12-14 12:55:55 【问题描述】:

我运行了以下简单脚本:

import sys
import pandas as pd
df = pd.DataFrame([[1,2,3], [4,5,6]])
df.to_csv(sys.stdout)

预期输出(作为标准输出)

,0,1,2
0,1,2,3
1,4,5,6

但是,我在 macOS 10.12.6 上的 Python 2.7.15 下的程序没有标准输出输出。相反,它生成了一个名为 <stdout> 的文件,其中包含预期的输出。

有趣的是,在同一个操作系统上,Python 3.6.5 可以毫无问题地将结果显示为标准输出,而 virtualenved Python 3.6.5 无法显示(并生成了<stdout> 文件)。

有没有人指出这个结果的原因? Pandas 的版本是 0.23.1。

【问题讨论】:

【参考方案1】:

看起来这是一个已知问题:

https://github.com/pandas-dev/pandas/issues/21561

https://github.com/pandas-dev/pandas/pull/21478

【讨论】:

【参考方案2】:

取决于您最终尝试执行的操作,此解决方法可能有用,也可能没有用:

In [85]: from io import StringIO

In [86]: output = StringIO()

In [87]: df.to_csv(output)

In [88]: print(output.getvalue())
,0,1,2
0,1,2,3
1,4,5,6

(Python 3.6)

对于 Python 2.7,将上面的一行替换为:

from StringIO import StringIO

更新:

其实我觉得this might be the 'proper' way to do it:

In [3]: from io import StringIO

In [4]: output = StringIO()

In [5]: df.to_csv(output)

In [6]: output.seek(0)
Out[6]: 0

In [7]: print(output.read())
,0,1,2
0,1,2,3
1,4,5,6

【讨论】:

以上是关于Pandas to_csv(sys.stdout) 在我的环境下不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Pandas写出数据

爬虫,爬取景点信息采用pandas整理数据

Pandas.to_csv() 十进制参数

使用 pandas.DataFrame.to_csv() 按列输出不同的精度?

Pandas - 使用 to_csv 编写多索引行

AttributeError:模块“pandas”没有属性“to_csv”