输出熊猫数据框中所有列的数据

我有一个名为 params.csv的 csv 文件。我打开 ipython qtconsole并创建了一个熊猫 dataframe使用:

import pandas
paramdata = pandas.read_csv('params.csv', names=paramnames)

其中,paramnames是一个字符串对象的 python 列表:

paramnames = ["id",
"fc",
"mc",
"markup",
"asplevel",
"aspreview",
"reviewpd"]

在 ipython 提示符下,如果我键入 paramdata并按回车键,那么我不会得到具有列和值的数据帧,如 熊猫网站上的示例所示。相反,我得到关于数据框架的信息。我得到了:

In[35]: paramdata
Out[35]:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 59 entries, 0 to 58
Data columns:
id                    59  non-null values
fc                    59  non-null values
mc                    59  non-null values
markup                59  non-null values
asplevel              59  non-null values
aspreview             59  non-null values
reviewpd              59  non-null values

如果我输入 paramdata['mc'],那么我就会得到 mc列的预期值。我有两个问题:

(1)在熊猫网站上的例子中(例如,这里看到的 df的输出: http://pandas.sourceforge.net/indexing.html#additional-column-access)输入数据帧的名称就给出了实际的数据。为什么我得到的数据框架的信息如上所示,而不是实际的数据?我是否需要在某处设置一些输出选项?

(2)如何将数据框中的所有列输出到屏幕上,而不必键入它们的名称,也就是说,不必键入类似 paramdata[['id','fc','mc']]的内容。

我用的是熊猫版本0.8。

谢谢你。

285980 次浏览

有太多的数据要显示在屏幕上,因此显示的是摘要。

无论如何,如果你想输出数据(它可能不适合在屏幕上,看起来也不太好) :

print paramdata.values

将数据帧转换为其数字数组矩阵表示形式。

paramdata.columns

存储相应的列名和

paramdata.index

存储各自的索引(行名)。

您还可以使用 DataFrame.head(x)/.tail(x)来显示 DataFrame 的第一个/最后一个 x 行。

您可以使用序列切片语法,即

paramdata[:5] # first five records
paramdata[-5:] # last five records
paramdata[:] # all records

有时数据帧可能不适合屏幕缓冲区,在这种情况下,您可能最好打印一个小子集或导出到其他东西,绘图或(csv 再次)

用途:

pandas.set_option('display.max_columns', 7)

这将迫使熊猫显示你的7列。或者更一般:

pandas.set_option('display.max_columns', None)

这将迫使它显示任意数量的列。

说明: max_columns的默认值是 0,它告诉熊猫只有当所有的列都可以挤到控制台的宽度时才显示表。

或者,您可以使用 e.g 将控制台宽度(以字符为单位)从默认的80更改为:

pandas.set_option('display.width', 200)

我知道这是一个古老的问题,但我只是有一个类似的问题,我认为我所做的也会为你工作。

我使用 to _ csv ()方法并写到 stdout:

import sys


paramdata.to_csv(sys.stdout)

这会转储整个数据框,无论它是否可以很好地打印,您可以使用 to _ csv 参数来配置列分隔符,无论索引是否打印,等等。

编辑: 现在可以使用 None作为 .to_csv()的目标,效果也差不多,可以说效果要好得多:

paramdata.to_csv(None)

ipython中,我使用它来打印一部分运行良好的数据框(打印前100行) :

print paramdata.head(100).to_string()

我从 R 开始介绍 python,R 的 head()函数以一种非常方便的方式包装了代码行,用于查看数据:

> head(cbind(mtcars, mtcars, mtcars))
mpg cyl disp  hp drat    wt  qsec vs am gear carb  mpg cyl
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4 21.0   6
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4 21.0   6
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1 22.8   4
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1 21.4   6
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2 18.7   8
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1 18.1   6
disp  hp drat    wt  qsec vs am gear carb  mpg cyl disp  hp
Mazda RX4          160 110 3.90 2.620 16.46  0  1    4    4 21.0   6  160 110
Mazda RX4 Wag      160 110 3.90 2.875 17.02  0  1    4    4 21.0   6  160 110
Datsun 710         108  93 3.85 2.320 18.61  1  1    4    1 22.8   4  108  93
Hornet 4 Drive     258 110 3.08 3.215 19.44  1  0    3    1 21.4   6  258 110
Hornet Sportabout  360 175 3.15 3.440 17.02  0  0    3    2 18.7   8  360 175
Valiant            225 105 2.76 3.460 20.22  1  0    3    1 18.1   6  225 105
drat    wt  qsec vs am gear carb
Mazda RX4         3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     3.90 2.875 17.02  0  1    4    4
Datsun 710        3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 3.15 3.440 17.02  0  0    3    2
Valiant           2.76 3.460 20.22  1  0    3    1

我开发了下面这个小小的 python 函数来模拟这个功能:

def rhead(x, nrow = 6, ncol = 4):
pd.set_option('display.expand_frame_repr', False)
seq = np.arange(0, len(x.columns), ncol)
for i in seq:
print(x.loc[range(0, nrow), x.columns[range(i, min(i+ncol, len(x.columns)))]])
pd.set_option('display.expand_frame_repr', True)

(显然,这取决于熊猫和麻木不仁)