Я заметил, что использование len
в DataFrame намного быстрее, чем использование len
в базовом массиве numpy. Я не понимаю, почему. Доступ к одной и той же информации через shape
тоже не поможет. Это более актуально, поскольку я пытаюсь получить число столбцов и количество строк. Я всегда обсуждал, какой метод использовать.
Я собрал следующий эксперимент, и очень ясно, что я буду использовать len
в dataframe. Но может кто-нибудь объяснить, почему?
from timeit import timeit
import pandas as pd
import numpy as np
ns = np.power(10, np.arange(6))
results = pd.DataFrame(
columns=ns,
index=pd.MultiIndex.from_product(
[['len', 'len(values)', 'shape'],
ns]))
dfs = {(n, m): pd.DataFrame(np.zeros((n, m))) for n in ns for m in ns}
for n, m in dfs.keys():
df = dfs[(n, m)]
results.loc[('len', n), m] = timeit('len(df)', 'from __main__ import df', number=10000)
results.loc[('len(values)', n), m] = timeit('len(df.values)', 'from __main__ import df', number=10000)
results.loc[('shape', n), m] = timeit('df.values.shape', 'from __main__ import df', number=10000)
fig, axes = plt.subplots(2, 3, figsize=(9, 6), sharex=True, sharey=True)
for i, (m, col) in enumerate(results.iteritems()):
r, c = i // 3, i % 3
col.unstack(0).plot.bar(ax=axes[r, c], title=m)