看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
pandas.col(col_name) 是 pandas 3.0.0 版本中新增的一个函数,用于生成一个延迟求值(deferred)的列表达式对象,代表 DataFrame 中某一列。它主要用在那些原本需要使用 lambda df: df[col_name] 的地方,以提供更简洁、可读性更强的语法。
pandas.col(col_name)
注意:该函数只有一个参数,因此无需换行。
| 参数名 | 类型 | 说明 |
|---|---|---|
col_name |
Hashable | 要引用的列名,必须是可哈希类型(如字符串、整数等)。 |
pandas.api.typing.Expression.assign()、.loc[]、.query() 等上下文中时,才根据当前 DataFrame 动态解析为对应列的数据(即 Series)。col_name)col_name 必须是 可哈希(Hashable) 的类型,常见包括:
"age"、"price"0、1(用于整数列名的 DataFrame)("A", "x")datetime 对象作列名,较少见)❌ 不支持列表、字典、集合等可变或不可哈希类型。
DataFrame.assign() 中创建新列DataFrame.loc[] 中进行条件筛选DataFrame.eval()、DataFrame.query() 等表达式系统中目前(pandas 3.0)官方文档明确支持
.assign()和.loc[]。
assign() 中使用import pandas as pd
# 构造示例数据
df = pd.DataFrame({
"name": ["beluga", "narwhal"],
"speed": [100, 110]
})
print("原始数据:")
print(df)
输出:
原始数据:
name speed
0 beluga 100
1 narwhal 110
使用 pd.col 创建新列:
result = df.assign(name_titlecase=pd.col("name").str.title())
print("\n使用 pd.col 处理后:")
print(result)
输出:
使用 pd.col 处理后:
name speed name_titlecase
0 beluga 100 Beluga
1 narwhal 110 Narwhal
等价于
df.assign(name_titlecase=lambda df: df["name"].str.title()),但更清晰。
.loc[] 中用于条件筛选filtered = df.loc[pd.col("speed") > 105]
print("\n筛选 speed > 105 的行:")
print(filtered)
输出:
筛选 speed > 105 的行:
name speed
1 narwhal 110
等价于
df.loc[df["speed"] > 105],但在链式操作或函数式风格中更统一。
df2 = pd.DataFrame([[1, 2], [3, 4]], columns=[0, 1])
print("整数列名 DataFrame:")
print(df2)
result2 = df2.assign(sum_col=pd.col(0) + pd.col(1))
print("\n使用 pd.col(0) 和 pd.col(1) 相加:")
print(result2)
输出:
整数列名 DataFrame:
0 1
0 1 2
1 3 4
使用 pd.col(0) 和 pd.col(1) 相加:
0 1 sum_col
0 1 2 3
1 3 4 7
传统写法(嵌套 lambda 容易混乱):
df.assign(
upper=lambda d: d["name"].str.upper(),
double_speed=lambda d: d["speed"] * 2
)
使用 pd.col 更直观:
df.assign(
upper=pd.col("name").str.upper(),
double_speed=pd.col("speed") * 2
)
尤其在复杂表达式中,避免重复写
lambda d: d[...],提升代码整洁度。
pd.col("xxx") 本身不绑定任何 DataFrame,是一个“占位符”。.assign() 内部)会抛出 KeyError。pd.col("name") 得到数据,它只是一个表达式对象。pandas.col(col_name) 是 pandas 表达式系统的重要组成部分,旨在:
适合在数据清洗、特征工程等需要大量列操作的场景中使用,让代码更简洁、可维护。
(完)
更新时间:2026-02-03 21:41:24 标签:pandas python 列表达式