使用Pandas pipe方法同时赋值DataFrame并保存文件失败,求解决方案
问题:如何用Pandas的pipe方法同时赋值DataFrame并保存
用户编写的代码如下:
import pandas as pd dat1 = pd.DataFrame({'col1' : ['A', 'B', 'A', 'C'], 'col2' : ['Z', 'Z', 'X', 'Y']}) Use_pipe = dat1.pipe(lambda x : x or x.to_csv('aa.csv'))
这段代码最后一行执行失败,需要实现通过pipe方法同时完成两个操作:将DataFrame赋值给Use_pipe,并把该DataFrame保存为CSV文件。
问题原因
原代码失效的关键在于:x.to_csv('aa.csv')执行后返回的是None,而x or x.to_csv(...)的逻辑完全错误——因为DataFrame对象本身是真值,or会直接返回x,根本不会执行to_csv;就算调换顺序,最终会返回None,导致Use_pipe拿到空值。
正确实现方式
方法1:用lambda先保存再返回DataFrame
利用逻辑运算符的短路特性,先执行保存操作(返回None),再返回原DataFrame:
import pandas as pd dat1 = pd.DataFrame({'col1' : ['A', 'B', 'A', 'C'], 'col2' : ['Z', 'Z', 'X', 'Y']}) Use_pipe = dat1.pipe(lambda x: x.to_csv('aa.csv') or x)
这里x.to_csv()返回None(假值),所以or会继续执行并返回x,既完成了保存,又把原DataFrame赋值给了Use_pipe。
方法2:自定义函数(可读性更强)
如果想让代码更清晰,可单独定义处理函数:
import pandas as pd def save_and_return(df, save_path): df.to_csv(save_path) return df dat1 = pd.DataFrame({'col1' : ['A', 'B', 'A', 'C'], 'col2' : ['Z', 'Z', 'X', 'Y']}) Use_pipe = dat1.pipe(save_and_return, save_path='aa.csv')
这种方式逻辑直观,后续也方便添加更多额外操作。
内容的提问来源于stack exchange,提问作者Brian Smith
相关产品推荐
相关产品推荐

