Python中能否调用函数并将返回值直接赋值给原对象?(Pandas场景)
首先得说,你提到的那种「直接把函数返回值赋值给第一个参数」的语法,在Python里并没有原生支持哦。不过别担心,Pandas本身就提供了更简洁的写法来解决你觉得冗余的问题,还有些Python层面的小技巧也能帮到你。
方法1:用Pandas原生的df.assign()方法
如果你不想重复写列名,可以用assign()方法,它会返回一个更新后的DataFrame(你可以选择覆盖原对象),写法更紧凑:
import pandas as pd dataframe = dataframe.assign(DATE=pd.to_datetime(dataframe['DATE']))
这里只需要写一次DATE,逻辑非常清晰——明确指定要更新DATE列,用pd.to_datetime()转换后的结果。
方法2:简化索引写法
其实你原来的代码里,loc[:, 'DATE']可以直接简化成dataframe['DATE'](当你要操作整列时),这样代码会短很多:
dataframe['DATE'] = pd.to_datetime(dataframe['DATE'])
虽然还是写了两次列名,但比loc的写法简洁不少,这也是Pandas里最常用的写法。
为什么你设想的语法不存在?
简单来说,Python的参数传递规则决定了这一点:pd.to_datetime()接收的是列的数据(比如一个Series对象),而不是列的「引用」。函数内部处理的是数据的副本,没办法直接修改原DataFrame里的列——除非函数本身被设计成原地修改的类型,但pd.to_datetime()并不是这类函数。
举个例子,你想的pd.to_datetime(dataframe['DATE'], +)这种语法,需要语言层面支持「把函数返回值自动赋值给传入的参数」,但Python没有这种语法糖,因为它的参数传递是「传对象引用」,但函数返回的是新对象,没办法自动把新对象绑定回原DataFrame的列上。
额外小技巧:用变量存列名
如果你的列名很长,或者要多次用到,还可以把列名存成变量,彻底减少重复:
date_col = 'DATE' dataframe[date_col] = pd.to_datetime(dataframe[date_col])
这样不管列名多长,都只需要写一次变量名就好啦。
内容的提问来源于stack exchange,提问作者salhin

