为Pandas实现df.clip()快捷方法,简化数据框复制到剪贴板操作
解决方案
方案一:正确使用自定义继承类
你的自定义ExtDF类代码本身没问题,但之前没生效是因为你还是用原生pd.DataFrame创建数据对象,自然没有自定义的clip方法。改用ExtDF实例化数据框即可:
import pandas as pd class ExtDF(pd.DataFrame): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @property def _constructor(self): return ExtDF def clip(self): return self.to_clipboard(excel=True, index=False) # 用ExtDF创建数据框 data = {'A':['x','y','x','z','y'], 'B':[1,2,2,2,2], 'C':['a','b','a','d','d']} df = ExtDF(data) # 现在直接调用df.clip()就能复制到剪贴板 df.clip()
这里的_constructor属性很重要,它能保证Pandas链式操作(比如分组、过滤)返回的结果依然是ExtDF实例,后续也能调用clip方法。
方案二:猴子补丁(更省心的方式)
如果不想每次都用自定义类创建数据框,直接给原生pd.DataFrame加个clip方法更方便:
import pandas as pd def df_clip(self): return self.to_clipboard(excel=True, index=False) # 把方法绑定到pd.DataFrame上 pd.DataFrame.clip = df_clip # 原生DataFrame也能直接用clip() data = {'A':['x','y','x','z','y'], 'B':[1,2,2,2,2], 'C':['a','b','a','d','d']} df = pd.DataFrame(data) df.clip()
这种方式不需要改变你原来创建DataFrame的习惯,所有已有的pd.DataFrame实例都能立刻用这个快捷方法。
内容的提问来源于stack exchange,提问作者itthrill
相关产品推荐
相关产品推荐

