Pandas2.2 DataFrame
Computations descriptive stats
方法 | 描述 |
---|
DataFrame.abs() | 用于返回 DataFrame 中每个元素的绝对值 |
DataFrame.all([axis, bool_only, skipna]) | 用于判断 DataFrame 中是否所有元素在指定轴上都为 True |
DataFrame.any(*[, axis, bool_only, skipna]) | 用于判断 DataFrame 中是否至少有一个元素在指定轴上为 True |
DataFrame.clip([lower, upper, axis, inplace]) | 用于截断(限制)DataFrame 中的数值 |
DataFrame.corr([method, min_periods, …]) | 用于计算 DataFrame 中各列之间的相关系数矩阵(Correlation Matrix) |
DataFrame.corrwith(other[, axis, drop, …]) | 用于计算当前 DataFrame 的每一列(或行)与另一个 Series 或 DataFrame 中对应列的相关系数 |
DataFrame.count([axis, numeric_only]) | 用于统计 DataFrame 中每列或每行的非空(非 NaN)元素数量 |
DataFrame.cov([min_periods, ddof, numeric_only]) | 用于计算 DataFrame 中每对列之间的协方差 |
DataFrame.cummax([axis, skipna]) | 用于计算 DataFrame 中每列或每行的累计最大值(cumulative maximum) |
DataFrame.cummin([axis, skipna]) | 用于计算 DataFrame 中每列或每行的累计最小值(cumulative minimum) |
DataFrame.cumprod([axis, skipna]) | 用于计算 DataFrame 中每列或每行的累计乘积(cumulative product) |
DataFrame.cumsum([axis, skipna]) | 用于计算 DataFrame 中每列或每行的累计和(cumulative sum) |
DataFrame.describe([percentiles, include, …]) | 用于快速生成数据集的统计摘要(summary statistics) |
DataFrame.diff([periods, axis]) | 用于计算 DataFrame 中相邻行或列之间的差值(差分) |
DataFrame.eval(expr, *[, inplace]) | 用于在 DataFrame 上下文中高效地执行字符串形式的表达式运算 |
pandas.DataFrame.eval()
pandas.DataFrame.eval()
方法用于在 DataFrame 上下文中高效地执行字符串形式的表达式运算。它允许你使用类似 Python 表达式的语法(如 +
, -
, *
, /
, 比较符等)来操作 DataFrame 的列,而无需显式调用 Pandas 函数或创建临时变量。
该方法特别适用于简化复杂表达式、节省内存和提高计算效率。
📌 方法签名:
DataFrame.eval(expr, *, inplace=False)
🧾 参数说明:
参数 | 类型 | 描述 |
---|
expr | str | 要计算的表达式字符串,例如 'A + B' , 'C > 5' , 'D = A * B' 等。支持大多数 Python 运算符和部分 NumPy 函数。 |
inplace | bool, 默认 False | 如果为 True ,则将结果赋值回原 DataFrame(仅当 expr 是赋值语句时有效)。 |
📊 返回值:
- 若
expr
是表达式(非赋值),返回一个 Series
或标量; - 若
expr
是赋值语句且 inplace=True
,则修改原 DataFrame 并返回 None
; - 否则返回一个新的 DataFrame。
✅ 示例及结果:
示例1:基本表达式计算
import pandas as pd
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
result = df.eval('A + B')
print(result)
输出结果:
0 5
1 7
2 9
dtype: int64
示例2:比较表达式
result = df.eval('A > B')
print(result)
输出结果:
0 False
1 False
2 False
dtype: bool
示例3:创建新列(不修改原 DataFrame)
new_df = df.eval('C = A * B')
print(new_df)
输出结果:
A B C
0 1 4 4
1 2 5 10
2 3 6 18
示例4:使用 inplace=True
修改原 DataFrame
df.eval('D = A + B', inplace=True)
print(df)
输出结果:
A B D
0 1 4 5
1 2 5 7
2 3 6 9
示例5:使用局部变量(通过 @
符号引用)
scale = 2
result = df.eval('A + B * @scale')
print(result)
输出结果:
0 9
1 12
2 15
dtype: int64
示例6:逻辑组合表达式
result = df.eval('(A < 2) & (B > 4)')
print(result)
输出结果:
0 False
1 True
2 False
dtype: bool
🎯 适用场景:
场景 | 描述 |
---|
特征工程 | 快速构造新特征,如 X = A + B , Y = log(C) |
数据清洗 | 条件筛选、布尔索引前的逻辑构建 |
性能优化 | 相比普通 Pandas 操作更高效,尤其对大数据集 |
代码简洁性 | 替代冗长的表达式写法,提升可读性 |
⚠️ 注意事项:
- 只能访问当前 DataFrame 中的列名;
- 使用
@
前缀可以引用外部变量; - 不支持复杂的控制流语句(如 if/for);
- 对于赋值表达式,推荐使用
inplace=True
避免中间变量; - 不会自动处理字符串列,只适用于数值型数据;
📋 总结:
特性 | 描述 |
---|
功能 | 执行字符串表达式进行列间运算 |
默认行为 | 返回新 Series 或 DataFrame |
是否修改原数据 | 可通过 inplace=True 控制 |
适用类型 | 数值型列(int、float) |
优势 | 更快、更简洁、节省内存 |
eval()
是一个非常强大的工具,适合在数据预处理、特征工程和快速探索分析中使用。