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

Python中能否用类似R dplyr的方式实现DataFrame列多变换

Python中实现类似R dplyr mutate的列批量转换方案

当然有,Python里有多种方式可以避免重复书写DataFrame名称,实现多列的不同转换操作,以下是几种常用方案:

1. Pandas 内置 assign() 方法

这是最原生的解决方案,无需额外安装库,语法简洁且支持链式操作:

基础用法

import pandas as pd

# 示例转换函数
def f_1(x):
    return x * 2
def f_2(x):
    return pd.to_datetime(x)
def f_3(x):
    return x.str.upper()

# 一次性完成多列转换
df = df.assign(
    col1=f_1(df['col1']),
    col2=f_2(df['col2']),
    col3=f_3(df['col3'])
)

更简洁的Lambda写法

通过Lambda表达式可以进一步减少重复,直接引用当前DataFrame的列:

df = df.assign(
    col1=lambda d: d['col1'] * 2,  # d代表当前的DataFrame
    col2=pd.to_datetime,           # 内置函数可直接传入
    col3=lambda d: d['col3'].str.upper()
)

2. 链式管道操作

结合Pandas的链式调用特性,可以像R的管道|>一样连续执行多个操作,全程无需重复写外层的DataFrame名称:

df = (df
      .assign(
          col1=lambda d: d['col1'] * 2,
          col2=pd.to_datetime,
          col3=lambda d: d['col3'].str.upper()
      )
      .dropna(subset=['col2'])  # 链式执行后续操作,比如删除缺失值
      .query("col1 > 10")       # 筛选符合条件的行
)

3. 使用PyJanitor库(贴近R dplyr语法)

如果习惯R中mutate的写法,可以安装pyjanitor库,它提供了几乎一致的语法:

pip install pyjanitor
import janitor

df = (df
      .mutate(
          col1=f_1(col1),
          col2=f_2(col2),
          col3=f_3(col3)
      )
)

这里直接使用列名即可,完全不用写df['col'],和R的写法高度一致。


内容的提问来源于stack exchange,提问作者Amin Shn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 08:12:27