让我先说我对numpy和pandas相当新鲜。我正在尝试构建一个pandas数据帧,但我不确定我是否以适当的方式做事。
我的设置是我有一个很大的.Net对象列表(我几乎无法控制),我想用pandas数据框建立一个时间序列。我有一个例子,我用简化的占位符类替换.Net类只是为了演示。代码中的listOfthings
基本上是我从.Net获得的,我想将其转换为pandas数据帧。
我的问题是:
np.datetime64(str(np.datetime64('now','us')))
。代码示例:
import numpy as np
import pandas as pd
class PlaceholderClass:
def time(self):
return str(np.datetime64('now', 'us'))
def value(self):
return 100*np.random.random_sample()
listOfThings = [PlaceholderClass() for i in range(1000)]
arr = np.array([(x.time(), x.value()) for x in listOfThings], dtype=[('time', np.datetime64), ('value', np.float)])
dataframe = pd.DataFrame(data=arr['value'], index=arr['time'])
提前致谢
Q1:
我认为没有必要首先创建一个np.array然后创建数据帧。这完全没问题,例如:
rd = lambda: datetime.date(randint(2005,2025), randint(1,12),randint(1,28))
df = pd.DataFrame([(rd(), rd()) for x in range(100)])
后来添加:
df = pd.DataFrame((x.value() for x in listOfThings), index=(pd.to_datetime(x.time()) for x in listOfThings))
Q2:
我注意到pd.to_datetime('some date')几乎总能让它正确。即使没有指定格式。也许这有帮助。
In [115]: pd.to_datetime('2008-09-22T13:57:31.2311892-04:00')
Out[115]: Timestamp('2008-09-22 17:57:31.231189200')