输出熊猫数据框中所有列的数据[重复]
Posted
技术标签:
【中文标题】输出熊猫数据框中所有列的数据[重复]【英文标题】:Output data from all columns in a dataframe in pandas [duplicate] 【发布时间】:2012-07-06 21:35:31 【问题描述】:我有一个名为 params.csv
的 csv 文件。我打开ipython qtconsole
并使用以下方法创建了一个熊猫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 website 上的示例所示。相反,我得到了有关数据框的信息。我明白了:
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 版。
谢谢。
【问题讨论】:
【参考方案1】:用途:
pandas.set_option('display.max_columns', 7)
这将强制 Pandas 显示您拥有的 7 列。或更笼统地说:
pandas.set_option('display.max_columns', None)
这将强制它显示任意数量的列。
解释:max_columns
的默认值是0
,它告诉 Pandas 仅当所有列都可以压缩到控制台宽度时才显示表格。
或者,您可以使用以下命令将控制台宽度(以字符为单位)从默认值 80 更改为:
pandas.set_option('display.width', 200)
【讨论】:
set_option 似乎是新的,也许从 0.13 版开始?对于早期版本,请尝试例如pd.set_printoptions(max_columns=7) 见***.com/questions/11707586/…【参考方案2】:屏幕上要显示的数据太多,因此改为显示摘要。
如果你还是想输出数据(它可能不适合屏幕并且看起来不太好):
print paramdata.values
将数据框转换为其 numpy-array 矩阵表示形式。
paramdata.columns
存储各自的列名和
paramdata.index
存储相应的索引(行名)。
【讨论】:
-1 我认为应该提到set_printoptions
。 paramdata.values
不是一个好的解决方案,因为numpy
可能不会全部显示(取决于大小)并且索引信息会丢失。【参考方案3】:
我知道这是一个老问题,但我刚刚遇到了类似的问题,我认为我所做的也对你有用。
我使用了 to_csv() 方法并写入标准输出:
import sys
paramdata.to_csv(sys.stdout)
这应该转储整个数据帧,无论它是否可以很好地打印,并且您可以使用 to_csv 参数来配置列分隔符、是否打印索引等。
编辑:现在可以使用None
作为.to_csv()
的目标,效果类似,可以说要好得多:
paramdata.to_csv(None)
【讨论】:
.to_csv(None)
是切肉刀 :-)【参考方案4】:
在ipython
中,我使用它来打印运行良好的数据帧的一部分(打印前 100 行):
print paramdata.head(100).to_string()
【讨论】:
【参考方案5】:您也可以使用DataFrame.head(x)
/ .tail(x)
来显示DataFrame 的第一/最后x 行。
【讨论】:
【参考方案6】:我从 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)
【讨论】:
【参考方案7】:您可以使用序列切片语法,即
paramdata[:5] # first five records
paramdata[-5:] # last five records
paramdata[:] # all records
有时数据框可能不适合屏幕缓冲区,在这种情况下,您最好打印一个小子集或将其导出到其他东西、绘图或(再次使用 csv)
【讨论】:
以上是关于输出熊猫数据框中所有列的数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章