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
相关产品推荐
相关产品推荐

