gpt4 book ai didi

python - 从对象列表列表构建 dataFrame 花费的时间太长

转载 作者:行者123 更新时间:2023-12-04 10:44:10 27 4
gpt4 key购买 nike

我正在提取大量数据。它以对象列表的形式出现。

Example: [[objectA, objectB],[objectC],[],[ObjectD]...]



每个对象都有很多属性,但是对于我的数据帧,我只需要名称、值、时间戳、描述。
我尝试了两件事:
for events in events_list:
if len(events) > 0:
for event in events:
df = DataFrame([])
df['timestamp'] = event.timestamp
df['value'] = event.value
df['name'] = event.name
df['desc'] = event.desc
final_df = final_df.append(df)

这需要大约 ~ 15 分钟 去完成。

我将代码更改为使用 python 列表:
df_list = list()
for events in events_list:
if len(events) > 0:
for event in events:
df_list.append([event.timestamp, event.value, event.name, event.desc])
final_df = pd.DataFrame(df_list, columns=['timestamp', 'value', 'name', 'desc'])

通过此更改,我设法将时间减少到大约 ~ 10-11 分钟 .

我仍在研究是否有办法更快地做到这一点。在我使用 python 列表进行更改之前,我尝试了字典,但它比我预期的要慢。目前我正在阅读 Panads 矢量化,这看起来非常快,但是我不确定我是否可以将它用于我的目的。
我知道 Python 循环有点慢,而且我对它们无能为力,所以我也在尝试找出一种方法来在数据帧中执行这些循环。

我的问题是,你们之前有没有人解决过这个问题,有没有更好的方法来解决这个问题?

编辑:
有关于数据的问题。它来自一个 API,并且以这种方式构建,因为每组对象都按名称分组。例如:

[[objectA, objectB (both have the same name)],[objectC],[EMPTY - There is no data for this name],[ObjectD]...]



因为我无法改变获取数据的方式,所以我必须使用这种数据结构。

最佳答案

初始方法中计算量大的操作是 append - 每次使用 final_df.append(df) 时您正在创建一个全新的(每次迭代都更大!)数据框。相反,将所有数据帧聚合到一个列表中并使用 pd.concat(df_list) .

为了比这更快,您可能需要考虑在某种程度上使用多处理,无论是通过标准的 python 多处理库还是通过框架 - 我推荐 Dask。

编辑:PS
如果您的数据最初是 csv/excel/parquet 或 Pandas 支持的其他格式,您可以使用 Pandas 以非常有效的方式一次性加载所有数据。即使您的事件包含不必要的列,加载整个数据集然后过滤掉多余的列也会快得多。

关于python - 从对象列表列表构建 dataFrame 花费的时间太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59792315/

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