在pandas中输出数据框中的所有列。

136

我有一个名为params.csv的 CSV 文件。我打开了ipython qtconsole并创建了一个 pandas dataframe,方法如下:

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

其中paramnames是一个Python字符串对象的列表。以下是paramnames的示例(实际列表长度为22):

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

在ipython提示符下,如果我键入paramdata并按Enter,则无法获得与Pandas网站上的示例所示的带有列和值的数据框。而是会得到关于数据框的信息。我得到的是:

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) 在pandas网站的示例中(例如,在这里查看df的输出:http://pandas.sourceforge.net/indexing.html#additional-column-access),键入数据框名称会给出实际数据。为什么我得到的是如上所示的关于数据框的信息而不是实际的数据?我需要在某个地方设置一些输出选项吗?
(2) 如何将数据框中的所有列输出到屏幕上,而无需键入它们的名称,即无需键入类似于paramdata[['id','fc','mc']]的内容。
我正在使用版本0.8的pandas。
谢谢。
7个回答

323

使用:

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

这将强制 Pandas 显示您拥有的 7 列。或者更一般地说:

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

这将强制显示任意数量的列。

解释:默认情况下,max_columns 的值为 0,这告诉 Pandas 只有当所有列都可以挤入控制台宽度时才显示表格。

或者,您可以通过以下方式更改控制台宽度(以字符为单位),例如:

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

2
set_option似乎是新的,也许是从0.13版本开始的?对于早期版本,请尝试使用pd.set_printoptions(max_columns=7)。请参见https://dev59.com/QGgt5IYBdhLWcg3w7ByL。 - nealmcb

48

由于屏幕上展示的数据太多,因此仅显示摘要。

如果您仍要输出数据(它可能不适合屏幕并且看起来不太好):

print paramdata.values

将数据框转换为其NumPy数组矩阵表示形式。

paramdata.columns

存储各列的名称和

paramdata.index

存储相应的索引(行名)。


28
我认为应该提到set_printoptions函数。paramdata.values不是一个好的解决方案,因为根据大小,numpy可能也无法显示所有内容,并且索引信息会丢失。 - bmu

31

我知道这是一个老问题,但我最近遇到了类似的问题,我认为我所做的对您也有用。

我使用了to_csv()方法并写入标准输出:

import sys

paramdata.to_csv(sys.stdout)

无论数据框是否可视化,此代码将把整个数据框导出。您可以使用to_csv函数的参数来配置列分隔符、是否打印索引等。

编辑:现在可以将None作为.to_csv()函数的目标使用,具有类似的效果,这可能更好:

paramdata.to_csv(None)

1
.to_csv(None) 很聪明 :-) - Abu Shoeb

22
ipython中,我使用以下代码来输出数据框的一部分,它能够很好地工作(打印出前100行):
print paramdata.head(100).to_string()

9

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


8

我从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)

(这显然取决于 pandas 和 numpy)

0

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

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

有时候数据框可能无法适应屏幕缓冲区,这种情况下最好打印一个小子集或将其导出到其他格式,例如绘图或(再次使用csv)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接