为何Pandas的apply方法返回函数而非值?
问题解析:为什么Pandas的apply返回函数对象而非日期值?
嘿,这个问题其实挺典型的——你写的lambda表达式没有真正调用pd.to_datetime函数,只是把函数本身返回了,所以才会得到一堆函数对象,而不是转换后的日期数据。
咱们拆解下你的代码:
testdf.apply(lambda x: pd.to_datetime, axis=0)
这里的lambda x: pd.to_datetime意思是:“接收参数x,然后返回pd.to_datetime这个函数本身”,而不是“用x作为参数调用pd.to_datetime”。所以每一列传入lambda后,返回的都是函数对象,自然不会得到日期值。
怎么修复?有几种简单的方式:
1. 直接把函数传给apply(最简洁)
apply会自动把每一列(因为axis=0)作为参数传递给pd.to_datetime,所以直接写函数名就行:
testdf.apply(pd.to_datetime, axis=0)
2. 在lambda里真正调用函数
如果一定要用lambda,记得给pd.to_datetime加上括号,把x传进去:
testdf.apply(lambda x: pd.to_datetime(x), axis=0)
3. 更高效的写法:跳过apply直接转换
其实对于日期转换,完全不需要用apply,直接对列或者整个DataFrame操作更高效:
# 单列转换 testdf['date_col_1'] = pd.to_datetime(testdf['date_col_1']) testdf['date_col_2'] = pd.to_datetime(testdf['date_col_2']) # 全列一次性转换 testdf = pd.to_datetime(testdf.stack()).unstack()
这样处理后,你的DataFrame里的列就会变成datetime64类型啦。
内容的提问来源于stack exchange,提问作者muon
相关产品推荐
相关产品推荐

