- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试创建 Pandas 数据结构的子类,以在我的代码中替换 dict
的子类 与 Series
的子类,我不明白为什么这个示例代码不起作用
from pandas import Series
class Support(Series):
def supportMethod1(self):
print 'I am support method 1'
def supportMethod2(self):
print 'I am support method 2'
class Compute(object):
supp=None
def test(self):
self.supp()
class Config(object):
supp=None
@classmethod
def initializeConfig(cls):
cls.supp=Support()
@classmethod
def setConfig1(cls):
Compute.supp=cls.supp.supportMethod1
@classmethod
def setConfig2(cls):
Compute.supp=cls.supp.supportMethod2
Config.initializeConfig()
Config.setConfig1()
c1=Compute()
c1.test()
Config.setConfig2()
c1.test()
可能这不是更改某些对象配置的最佳方法,无论如何我发现这在我的代码中很有用,最重要的是我想了解为什么使用 dict 而不是 series 它按我的预期工作。
非常感谢!
最佳答案
Pandas 0.13 中的内部重构大大简化了子类化。 Pandas Series
现在可以像任何其他 Python 对象一样被子类化:
class MySeries(pd.Series):
def my_method(self):
return "my_method"
问题在于 Series 使用 __new__
确保实例化 Series 对象。
你可以像这样修改你的类:
class Support(pd.Series):
def __new__(cls, *args, **kwargs):
arr = Series.__new__(cls, *args, **kwargs)
return arr.view(Support)
def supportMethod1(self):
print 'I am support method 1'
def supportMethod2(self):
print 'I am support method 2'
但是,最好是做一个 has-a 而不是一个 is-a。或者猴子修补 Series 对象。原因是由于数据存储的性质,您在使用 pandas 时经常会丢失子类。像
这样简单的东西s.ix[:5]
s.cumsum()
将返回一个 Series 对象而不是您的子类。在内部,数据存储在连续数组中并针对速度进行了优化。数据仅在需要时与类一起装箱,并且这些类是硬编码的。另外,如果类似 s.ix[:5]
的东西应该返回相同的子类,这并不是很明显。这将取决于您的子类的语义以及附加到它的元数据。
http://nbviewer.ipython.org/3366583/subclassing%20pandas%20objects.ipynb有一些笔记。
关于python - Pandas 对象的子类与其他对象的子类工作方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11979194/
pandas.crosstab 和 Pandas 数据透视表似乎都提供了完全相同的功能。有什么不同吗? 最佳答案 pivot_table没有 normalize争论,不幸的是。 在 crosstab
我能找到的最接近的答案似乎太复杂:How I can create an interval column in pandas? 如果我有一个如下所示的 pandas 数据框: +-------+ |
这是我用来将某一行的一列值移动到同一行的另一列的当前代码: #Move 2014/15 column ValB to column ValA df.loc[(df.Survey_year == 201
我有一个以下格式的 Pandas 数据框: df = pd.DataFrame({'a' : [0,1,2,3,4,5,6], 'b' : [-0.5, 0.0, 1.0, 1.2, 1.4,
所以我有这两个数据框,我想得到一个新的数据框,它由两个数据框的行的克罗内克积组成。正确的做法是什么? 举个例子:数据框1 c1 c2 0 10 100 1 11 110 2 12
TL;DR:在 pandas 中,如何绘制条形图以使其 x 轴刻度标签看起来像折线图? 我制作了一个间隔均匀的时间序列(每天一个项目),并且可以像这样很好地绘制它: intensity[350:450
我有以下两个时间列,“Time1”和“Time2”。我必须计算 Pandas 中的“差异”列,即 (Time2-Time1): Time1 Time2
从这个 df 去的正确方法是什么: >>> df=pd.DataFrame({'a':['jeff','bob','jill'], 'b':['bob','jeff','mike']}) >>> df
我想按周从 Pandas 框架中的列中累积计算唯一值。例如,假设我有这样的数据: df = pd.DataFrame({'user_id':[1,1,1,2,2,2],'week':[1,1,2,1,
数据透视表的表示形式看起来不像我在寻找的东西,更具体地说,结果行的顺序。 我不知道如何以正确的方式进行更改。 df示例: test_df = pd.DataFrame({'name':['name_1
我有一个数据框,如下所示。 Category Actual Predicted 1 1 1 1 0
我有一个 df,如下所示。 df: ID open_date limit 1 2020-06-03 100 1 2020-06-23 500
我有一个 df ,其中包含与唯一值关联的各种字符串。对于这些唯一值,我想删除不等于单独列表的行,最后一行除外。 下面使用 Label 中的各种字符串值与 Item 相关联.所以对于每个唯一的 Item
考虑以下具有相同名称的列的数据框(显然,这确实发生了,目前我有一个像这样的数据集!:() >>> df = pd.DataFrame({"a":range(10,15),"b":range(5,10)
我在 Pandas 中有一个 DF,它看起来像: Letters Numbers A 1 A 3 A 2 A 1 B 1 B 2
如何减去两列之间的时间并将其转换为分钟 Date Time Ordered Time Delivered 0 1/11/19 9:25:00 am 10:58:00 am
我试图理解 pandas 中的下/上百分位数计算,但有点困惑。这是它的示例代码和输出。 test = pd.Series([7, 15, 36, 39, 40, 41]) test.describe(
我有一个多索引数据框,如下所示: TQ bought HT Detailed Instru
我需要从包含值“低”,“中”或“高”的数据框列创建直方图。当我尝试执行通常的df.column.hist()时,出现以下错误。 ex3.Severity.value_counts() Out[85]:
我试图根据另一列的长度对一列进行子串,但结果集是 NaN .我究竟做错了什么? import pandas as pd df = pd.DataFrame([['abcdefghi','xyz'],
我是一名优秀的程序员,十分优秀!