【发布时间】:2021-10-23 17:04:06
【问题描述】:
我发现对于 pandas 数据框的不同列选择技术,fillna 的处理时间存在显着差异。
数据帧的fillna 花费的时间,其列是使用loc 选择的
df1 = df.copy()
t1 = time.time()
df1.loc[:, col] = df1.loc[:, col].fillna(method="ffill")
t2 = time.time()
print(t2-t1)
3.908552885055542
fillna 的数据帧所用的时间,其列是使用方括号选择的:
df1 = df.copy()
t1 = time.time()
df1[col] = df1[col].fillna(method="ffill")
t2 = time.time()
print(t2-t1)
223.85472440719604
这个post 建议使用 loc 和方括号进行列选择是相似的:-
选择列列表 (df[['A', 'B', 'C']] 是一样的as df.loc[:, ['A', 'B', 'C']] -> 选择列 A、B 和 C)
谁能帮忙解释一下为什么会有时差?谢谢!!
【问题讨论】:
-
我测试了一下,结果差不多;您的测试中可能有问题。也许如果您为此观察提供样本数据,那么我们可以重现这种巨大的差异
-
在我自己的数据上用
%%timeit做的,.loc[col]是 680us 而[col]是 396us。 -
我上传了示例数据框file。
[col]10 秒而loc[col]0.3 秒对于此示例数据 -
数据框索引一项复杂的任务,涉及索引和列数组。它比
numpy使用位置和紧凑多维数组的索引涉及更多。首先,您可以查看df.__getitiem__以查看启动索引的代码(可能是 python)。
标签: python pandas dataframe numpy fillna