【发布时间】:2019-04-26 05:12:42
【问题描述】:
我正在尝试创建自己的 Dataframe 类。当我调用它时,我希望它有一些特定的列。所以我这样做:
from pandas import DataFrame
class MyClass(DataFrame):
def __init__(self):
super(MyClass, self).__init__(columns=['Class','Conditions'])
但是,当我尝试向其附加数据时,
test = MyClass()
#test = MyClass(columns=['Class','Conditions'])
test.loc[2] = ['class2',[1, 2, 3]]
我收到一个错误:
文件“C:\Miniconda3\lib\site-packages\pandas\core\indexing.py”,行 189,在setitem中 self._setitem_with_indexer(indexer, value)
文件“C:\Miniconda3\lib\site-packages\pandas\core\indexing.py”,行 451,在_setitem_with_indexer中 self.obj._data = self.obj.append(value)._data
文件“C:\Miniconda3\lib\site-packages\pandas\core\frame.py”,行 6211,附加 排序=排序)
文件 “C:\Miniconda3\lib\site-packages\pandas\core\reshape\concat.py”,行 226,连续 返回 op.get_result()
文件 “C:\Miniconda3\lib\site-packages\pandas\core\reshape\concat.py”,行 428,在 get_result 中 return (cons._from_axes(new_data, self.new_axes)
文件“C:\Miniconda3\lib\site-packages\pandas\core\generic.py”,行 第356章 返回 cls(data, **kwargs)
TypeError: init() 接受 1 个位置参数,但给出了 2 个
我意识到如果我不声明 __init__ 中的列并在创建类后分配它们,我没有问题。
但是,我想用这些名称作为列来创建类。
非常感谢。
【问题讨论】:
-
我无法复制。你能提供一个minimal reproducible example 来代替
Condition('var2',op.ne,3)吗? -
对不起@jpp 我的错。您可以用列表替换条件。像 [1,2,3]。我更新了这个例子。谢谢你。问候
-
它是否需要是
DataFrame的子类 - 除非你要添加/覆盖方法等...看起来你可以做MyDataFrame = functools.partial(DataFrame, columns=['Class', 'Condtions'])来修复调用的列参数并使用它? -
@GermánMartínez,您的代码在 v0.19.2 中对我来说可以正常工作。你用的是什么版本?
-
嗨@jpp,代码有效,但我希望在构造对象时预定义列。问候
标签: python pandas class dataframe subclassing