我正在尝试实现一个具有数组接口的python对象,我有兴趣看看我是否可以使用pandas来可视化来自我的对象的数据。我基本上是从10 minutes to pandas尝试这个例子。 numpy版本是
@SuppressWarnings("finally")
private boolean existClass(String className){
Class<?> classname= null;
try {
classname = Class.forName(className);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally{
if(classname == null)
return false;
else
return true;
}
}
现在我想做这样的事情
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
果然,这给了我这个错误:
import pandas as pd
import <my_module> as np
a = <array object from my module of size (6,4) with python float values>
df = pd.DataFrame(a, index=dates, columns=list('ABCD'))
现在,我创建的数组对象使用numpy.array例程
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File ".../Python-3.5.1/lib/python3.5/site-packages/pandas-0.18.1-py3.5-linux-x86_64.egg/pandas/core/frame.py", line 303, in __init__
raise PandasError('DataFrame constructor not properly called!')
我查看了... / pandas / core / frame.py中特定异常的代码。代码位于DataFrame对象的构造函数中
>>> import numpy as np
>>> import <my_module> as gnp
>>> a = <array object from my_module of size (6,4) with python float values>
>>> anp = np.array(a)
>>> print(anp)
array([[ 1.65596968, -2.39189608, -2.92223678, -1.0312887 ],
[ 0.41918582, 2.35760521, 3.97045546, 1.06558325],
[-0.29084453, 1.43759343, 2.94189788, 0.07185253],
[-1.51164217, 0.9233231 , 2.05859341, 2.62394528],
[ 0.12106421, -1.03187945, 2.36255711, 0.86845971],
[-1.39774121, 5.17955785, -1.05458446, -2.10051246]])
从技术上来说,我正在尝试的应该是可行的,我希望,如果可以使用np.array创建一个numpy数组对象,pandas应该能够处理该对象,类似于它处理案例的方式numpy数组被传入。相反,它看起来像是试图强制数组大小为0的条件。这是一个pandas bug还是我正在尝试一些不可行的东西?
我很抱歉这篇长篇文章,但这是我能传达完整问题的唯一方法。我将非常感谢能够帮助我弄清楚正在发生什么的任何回复。
修改
这是我认为需要的改变。有了这个,我好像得到了我想要的东西。希望有人从熊猫回应
def __init__(self, data=None, index=None, columns=None, dtype=None,
copy=False):
elif isinstance(data, (np.ndarray, Series, Index)):
....
else:
try:
arr = np.array(data, dtype=dtype, copy=copy)
except (ValueError, TypeError) as e:
exc = TypeError('DataFrame constructor called with '
'incompatible data and dtype: %s' % e)
raise_with_traceback(exc)
if arr.ndim == 0 and index is not None and columns is not None:
....
else:
raise PandasError('DataFrame constructor not properly called!')