Ric*_*ton 7 python performance pandas
我有一个包含一列的熊猫(版本0.25.3)。我想计算每列的平均值。DataFramedatetime64
import numpy as np
import pandas as pd
n = 1000000
df = pd.DataFrame({
"x": np.random.normal(0.0, 1.0, n),
"d": pd.date_range(pd.datetime.today(), periods=n, freq="1H").tolist()
})
Run Code Online (Sandbox Code Playgroud)
计算单个列的平均值几乎是即时的。
df["x"].mean()
## 1000 loops, best of 3: 1.35 ms per loop
df["d"].mean()
## 100 loops, best of 3: 2.91 ms per loop
Run Code Online (Sandbox Code Playgroud)
但是,当我使用 DataFrame 的.mean()方法时,需要很长时间。
%timeit df.mean()
## 1 loop, best of 3: 9.23 s per loop
Run Code Online (Sandbox Code Playgroud)
我不清楚性能损失来自哪里。
避免减速的最佳方法是什么?我应该将datetime64列转换为不同的类型吗?使用DataFrame-level.mean()方法是否被视为不良形式?
您可以将其限制为数值:
df.mean(numeric_only=True)
然后它运行得也非常快。
这是文档中的文本:
numeric_only :bool,默认 None 仅包含 float、int、boolean 列。如果没有,将尝试使用所有内容,然后仅使用数字数据。未针对系列实现。
-- https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.mean.html