python - Pandas .loc[] 与 dict 相比非常慢
问题描述
我有一个大约 10 列和 100K 行的 DataFrame。我想使用.loc[]
索引来获取循环中的每一行。然而.loc[]
,与 Python 的 dict 相比,它的速度非常慢。
这是重现的代码:
import pandas as pd
import random
import time
data = {}
for i in range(100000):
data[i] = {
'id': i,
'a': random.randint(1, 40000),
'b': random.randint(1, 40000),
'c': random.randint(1, 40000),
'd': random.randint(1, 40000),
'e': random.randint(1, 40000),
'f': random.randint(1, 40000),
}
df = pd.DataFrame.from_dict(
data=data,
orient="index",
dtype=int,
)
df.set_index('id', inplace=True)
dict_objs = df.to_dict('index')
start_time_dataframe = time.time()
for i in range(100000):
obj = df.loc[i]
end_time_dataframe = time.time() - start_time_dataframe
start_time_dict = time.time()
for i in range(100000):
obj = dict_objs[i]
end_time_dict = time.time() - start_time_dict
print(f"Time needed for DataFrame: {end_time_dataframe}") # 12.08s
print(f"Time needed for Dict: {end_time_dict}") # 0.01s
为什么 DataFrame.loc[]
运行这么慢?
解决方案
推荐阅读
- javascript - Javascript - 类变量与类方法 - 有什么区别?
- python - 强制 pytest 始终运行特定的测试,无论“-k”如何
- python - 如何创建一个列表,其中每个条目都是另一个列表,其中包含来自 csv 文件的信息
- javascript - jquery/javascript 可以在表单标签内吗?
- elasticsearch - 我们可以使用 2 Denormalizer 一个用于读取,另一个用于弹性搜索吗
- android - 如何在带有我的 URL 的链接上打开 TWA 应用程序?
- android - 如何从移动应用程序中获取数据?
- angular - 带有默认模板的 Angular 地图
- elasticsearch - 弹性搜索如何增加数据节点
- javascript - 如何根据条件选择 React 组件道具