You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python/Pandas能否简化DataFrame新增列语法,类似SAS Data Step?

类似SAS Data Step的简洁列操作方法(Pandas实现)

嗨Sean,这个需求太戳人了——谁不想少写些重复的df['列名']呢?Pandas本身默认不支持你设想的with df1: c = a + b这种直接上下文语法,但有几个内置/第三方方案能实现类似的简洁效果,甚至更灵活:

1. 用Pandas内置的eval()方法(最接近SAS风格)

这是最贴合你需求的方案!DataFrame.eval()允许你直接用字符串形式写列名表达式,完全不用重复引用DataFrame对象:

import pandas as pd

df1 = pd.DataFrame({'a': [1], 'b': [2]})
# 原地新增列c,直接写a + b即可
df1.eval('c = a + b', inplace=True)

如果不想修改原DataFrame,也可以去掉inplace=True,直接赋值给新变量:

df2 = df1.eval('c = a + b')

这个方法还支持更复杂的表达式,比如df1.eval('c = a * 2 + b / 3'),语法逻辑和SAS Data Step几乎一致。

2. 使用assign()方法实现链式操作

assign()是Pandas内置的新增列工具,语法简洁,尤其适合连续新增多个列的场景:

# 方式1:直接引用列
df1 = df1.assign(c=df1['a'] + df1['b'])

# 方式2:用lambda参数,适配复杂逻辑
df1 = df1.assign(c=lambda x: x['a'] + x['b'])

链式调用示例(一次性加多个列):

df1 = df1.assign(
    c=lambda x: x['a'] + x['b'],
    d=lambda x: x['c'] * 2
)

3. 第三方库:dfply(模仿R语言dplyr风格)

如果你愿意安装第三方库,dfply提供了更接近“自然语言”的操作语法,和SAS Data Step的逻辑高度契合:
先安装库:

pip install dfply

然后用mutate函数新增列:

from dfply import mutate, X

df1 = df1 >> mutate(c=X.a + X.b)

这里的X代表DataFrame本身,>>是管道操作符,把数据传递给后续操作,读起来非常直观。

总结

如果追求最接近你设想的SAS风格,优先用df.eval();如果需要链式多列操作,assign()是内置的稳妥选择;喜欢R语言风格的话可以试试dfply。

内容的提问来源于stack exchange,提问作者Sean McCarthy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:47:21