gpt4 book ai didi

python - 从对象列表构建 pandas 数据框

转载 作者:太空宇宙 更新时间:2023-11-03 14:21:01 24 4
gpt4 key购买 nike

首先我要说的是,我对 numpy 和 pandas 还很陌生。我正在尝试构建一个 pandas 数据框,但我不确定我是否以适当的方式做事。

我的设置是,我有一个很大的 .Net 对象列表(我几乎无法控制),并且我想使用 pandas dataframe 从中构建一个时间序列。我有一个示例,其中我用简化的占位符类替换了 .Net 类,只是为了演示。代码中的 listOfthings 基本上是我从 .Net 获得的内容,我想将其转换为 pandas 数据帧。

我的问题是:

  1. 我通过首先构造一个 numpy 数组来构造数据帧。有这个必要吗?另外,这个数组的大小并不像我预期的那样为 1000x2。这里有更好的方法来使用 numpy 吗?
  2. 此代码不起作用,因为我似乎无法将字符串转换为 datetime64。这让我很困惑,因为该字符串采用 ISO 格式,并且当我尝试像这样解析它时它会起作用: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'])

提前致谢

最佳答案

第一季度:

我认为没有必要先创建一个 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))

第二季度:

我注意到 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')

关于python - 从对象列表构建 pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47940331/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com