python – 子类化Pandas DataFrame,更新?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 子类化Pandas DataFrame,更新?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2406字,纯文字阅读大概需要4分钟。
内容图文
继承还是不继承?
Pandas子类化问题的最新内容是什么? (大多数其他线程都是3-4岁).
我希望做点像……
import pandas as pd
class SomeData(pd.DataFrame):
# Methods
pass
ClsInstance = SomeData()
# Create a new column on ClsInstance?
解决方法:
这就是我做到的.我遵循了以下建议:
> subclassing-pandas-data-structures
> Fix Finalize Issue
下面的示例仅显示了构建pandas.DataFrame的新子类的用法.如果您遵循我的第一个链接中的建议,您可以考虑继承pandas.Series以考虑获取pandas.DataFrame子类的单维切片.
定义SomeData
import pandas as pd
import numpy as np
class SomeData(pd.DataFrame):
# This class variable tells Pandas the name of the attributes
# that are to be ported over to derivative DataFrames. There
# is a method named `__finalize__` that grabs these attributes
# and assigns them to newly created `SomeData`
_metadata = ['my_attr']
@property
def _constructor(self):
"""This is the key to letting Pandas know how to keep
derivative `SomeData` the same type as yours. It should
be enough to return the name of the Class. However, in
some cases, `__finalize__` is not called and `my_attr` is
not carried over. We can fix that by constructing a callable
that makes sure to call `__finlaize__` every time."""
def _c(*args, **kwargs):
return SomeData(*args, **kwargs).__finalize__(self)
return _c
def __init__(self, *args, **kwargs):
# grab the keyword argument that is supposed to be my_attr
self.my_attr = kwargs.pop('my_attr', None)
super().__init__(*args, **kwargs)
def my_method(self, other):
return self * np.sign(self - other)
示范
mydata = SomeData(dict(A=[1, 2, 3], B=[4, 5, 6]), my_attr='an attr')
print(mydata, type(mydata), mydata.my_attr, sep='\n' * 2)
A B
0 1 4
1 2 5
2 3 6
<class '__main__.SomeData'>
an attr
newdata = mydata.mul(2)
print(newdata, type(newdata), newdata.my_attr, sep='\n' * 2)
A B
0 2 8
1 4 10
2 6 12
<class '__main__.SomeData'>
an attr
newerdata = mydata.my_method(newdata)
print(newerdata, type(newerdata), newerdata.my_attr, sep='\n' * 2)
A B
0 -1 -4
1 -2 -5
2 -3 -6
<class '__main__.SomeData'>
an attr
陷阱
这个方法是pd.DataFrame.equals
newerdata.equals(newdata) # Should be `False`
06005
发生的是,此方法希望在_constructor属性中找到类型类型的对象.相反,它找到了我放在那里的可调用来解决我遇到的__finalize__问题.
解决
在类定义中使用以下内容覆盖equals方法.
def equals(self, other):
try:
pd.testing.assert_frame_equal(self, other)
return True
except AssertionError:
return False
newerdata.equals(newdata) # Should be `False`
False
内容总结
以上是互联网集市为您收集整理的python – 子类化Pandas DataFrame,更新?全部内容,希望文章能够帮你解决python – 子类化Pandas DataFrame,更新?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。