Python:打印 Pandas 数据框返回 numpy.ndarray 属性错误

Posted

技术标签:

【中文标题】Python:打印 Pandas 数据框返回 numpy.ndarray 属性错误【英文标题】:Python: Printing Pandas dataframe returns numpy.ndarray Attribute error 【发布时间】:2017-03-13 06:05:12 【问题描述】:

我正在尝试使用 numpy 数组创建熊猫数据框。 数据、索引和列数组都是 numpy 'ndarrays'(分别为 2D、1D 和 1D)并且在本示例中都是 float64。

import pandas as pd
import numpy as np

data = np.zeros((100, 15))
index = np.zeros((100, 1))
columns = np.zeros ((15, 1))

df1 = pd.DataFrame(data=data, index=index, columns=columns)
print(df1)

当我打印 df1 时,我得到了这个我无法解决的属性错误:

AttributeError: 'numpy.ndarray' 对象没有属性 'endswith'

当我打印print(df1.to_string()) 时返回相同的错误,但如果我打印print(df1.values)print(df1.index)print(df1.columns),则会返回预期的值。

我在这里遗漏了什么吗?诚然,我对使用 Pandas 还很陌生,但我认为这个简单的例子可以正常工作。

【问题讨论】:

感谢 jezrael 和 rmharrison - 这两个答案都帮助解决了我的问题。 【参考方案1】:

TL;DR

>>> index = np.zeros(100)
>>> columns = np.zeros (15)

详情

您将一个元组参数传递给np.zeros,这会产生一个数组数组

>>> np.zeros((15,1))
array([[ 0.],
   [ 0.],
   [ 0.],
   [ 0.],
   [ 0.],
   [ 0.],
   [ 0.],
   [ 0.],
   [ 0.],
   [ 0.],
   [ 0.],
   [ 0.],
   [ 0.],
   [ 0.],
   [ 0.]])

您会收到错误,因为 i) 每个元素都是一个数组,并且 ii) endswith 没有为数组定义。

indexcolumns 都采用类似列表(包括 array)的属性。您无需担心它们是矩阵中的“列”还是“行”(我想这就是您使用元组的原因)。

你只需要一个数组...

>>> np.zeros(15)
array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
    0.,  0.])

【讨论】:

【参考方案2】:

如果源是np.zeros((100, 15))np.zeros ((15, 1)),我认为您需要ravel 来创建indexcolumns 的扁平数组:

index = np.zeros((100, 1)).ravel()
columns = np.zeros ((15, 1)).ravel()

但如果需要索引和列的默认值,只需使用 DataFrame 构造函数 - indexcolumns 将设置为 np.arange(n),因为没有索引信息和列标签:

df1 = pd.DataFrame(data=data)
print (df1)

     0    1    2    3    4    5    6    7    8    9    10   11   12   13   14
0   0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
1   0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
2   0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
3   0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
4   0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
5   0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
...
...

【讨论】:

以上是关于Python:打印 Pandas 数据框返回 numpy.ndarray 属性错误的主要内容,如果未能解决你的问题,请参考以下文章

复制 Jupyter Notebook Pandas 数据框 HTML 打印输出

Pandas df.itertuples 在打印时重命名数据框列

使用 Pandas 时如何打印多达 3,000 行数据框 [重复]

在使用数字列表搜索列后返回数据框中的所有行 - Python/Pandas

Pandas 数据框仅返回 JSON 数据的第一行?

python pandas dataframe:将函数返回元组分配给数据框的两列