如果您能帮我解决您在以下链接中提供的解决方案,我将不胜感激: Converting a list of ints, tuples into an numpy array
您可能还记得您解释过将元组转换为numpy数组的方法。 我正在开发一个数据挖掘项目,我发现这是最快的方式 收集数据是通过使用元组,但为了更多,然后只是记录输入我需要一个numpy数组。所以我查找了你的解决方案并且有点工作 - 问题在于数据类型。 我有一个看起来像这样的元组:
t1=[[datetime.datetime(2013, 10, 1, 20, 54, 51), 'last'],[datetime.datetime(2013, 8, 1, 20, 54, 51), 'First'],[datetime.datetime(2013, 9, 2, 20, 54, 51), 'second']]
当我尝试修改你的代码时
A = np.array([tuple(i) for i in t1],dtype=[('ReportTime',datetime.datetime.__class__),('activity',str.__class__)])
numpy无法识别数据类型。 我输错了数据类型吗? 谢谢你的时间
答案 0 :(得分:3)
由于您正在处理数据挖掘项目,您是否考虑过使用Pandas?
这是一个如何将元组列表转换为Pandas数据帧的示例。我已经强调了我刚开始使用Pandas时遇到的一些常见新手错误,让您了解自己可以做什么和不能做什么。
In [1]: import pandas as pd
In [2]: data = [(1, 2), (1, 5), (2, 3), (2, 2)]
In [3]: pd.datafr
In [3]: pd.DataFrame(data)
Out[3]:
0 1
0 1 2
1 1 5
2 2 3
3 2 2
In [4]: pd.columns[0] = 'column 1'
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-4-c313e6b0cb87> in <module>()
----> 1 pd.columns[0] = 'column 1'
AttributeError: 'module' object has no attribute 'columns'
In [5]: df = pd.DataFrame(data)
In [6]: df
Out[6]:
0 1
0 1 2
1 1 5
2 2 3
3 2 2
In [7]: df.columns
Out[7]: Int64Index([0, 1], dtype=int64)
In [8]: df.columns[1] = "column 2"
---------------------------------------------------------------------------
Exception Traceback (most recent call last)
<ipython-input-8-76ee806aec72> in <module>()
----> 1 df.columns[1] = "column 2"
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas-0.12.0-py2.7-macosx-10.6-intel.egg/pandas/core/index.pyc in __setitem__(self, key, value)
328
329 def __setitem__(self, key, value):
--> 330 raise Exception(str(self.__class__) + ' object is immutable')
331
332 def __getitem__(self, key):
Exception: <class 'pandas.core.index.Int64Index'> object is immutable
In [9]: df.columns = ["column 1", "column 2"]
In [10]: df
Out[10]:
column 1 column 2
0 1 2
1 1 5
2 2 3
3 2 2
In [11]: exit()
特别是你的例子:
In [1]: import pandas as pd
In [3]: import datetime
In [4]: t1=[[datetime.datetime(2013, 10, 1, 20, 54, 51), 'last'],[datetime.datetime(2013, 8, 1, 20, 54, 51), 'First'],[datetime.datetime(2013, 9, 2, 20, 54, 51), 'second']]
In [5]: t1
Out[5]:
[[datetime.datetime(2013, 10, 1, 20, 54, 51), 'last'],
[datetime.datetime(2013, 8, 1, 20, 54, 51), 'First'],
[datetime.datetime(2013, 9, 2, 20, 54, 51), 'second']]
In [6]: df = pd.DataFrame(t1)
In [7]: df
Out[7]:
0 1
0 2013-10-01 20:54:51 last
1 2013-08-01 20:54:51 First
2 2013-09-02 20:54:51 second
答案 1 :(得分:1)
不要使用.__class__
?如果您不确定,只需看看它实际上做了什么:
>>> import datetime
>>> datetime.datetime.__class__
<class 'type'>
>>> str.__class__
<class 'type'>
datetime.datetime
和str
本质上已经是类,你可以传递给Numpy来确定该类的相应dtype(如果实际上它确实有一个与这些类关联的dtype,哪个适用于datetime.datetime
和str
)。
str.__class__
是类str
的类(Python类也是对象)。除非使用自定义元类定义,否则大多数类的类都是type
。