用 pandas DataFrame 初始化一个类并填充它
Posted
技术标签:
【中文标题】用 pandas DataFrame 初始化一个类并填充它【英文标题】:Initializing a class with a pandas DataFrame and filling it 【发布时间】:2019-05-08 22:36:50 【问题描述】:我正在尝试创建一个继承 pandas DataFrame 的类,并进行一些修改。但是,它没有按预期工作。
import pandas as pd
class result(pd.DataFrame):
def __init__(self, x):
pd.DataFrame.__init__(self)
j = pd.DataFrame('a': x)
print(x)
print(j)
self.append(j)
结果:
>>> k = result([2,4])
[2, 4]
a
0 2
1 4
>>> print(k)
Empty result
Columns: []
Index: []
如您所见,不知何故,j
没有附加返回值。为了比较,观察 j
和 k
何时未在类中定义:
>>> k = pd.DataFrame()
>>> j = pd.DataFrame('a': [2,4])
>>> print(k.append(j))
a
0 2
1 4
造成这种差异的原因是什么?如果我想将参数x
附加到j
中,我应该在result
中写什么?
非常感谢!
【问题讨论】:
这里的k值应该是多少? 它应该是一个 pd.DataFrame,a = [2,4]。 请编辑问题并以正确的格式提供预期的输出 【参考方案1】:原因是append
不会就地发生,因此您必须存储输出。你可以在这里找到一个例子enter link description here
对于这种情况,您可以这样做:
import pandas as pd
class Result:
def __init__(self):
self.main_dataframe = pd.DataFrame(data=None, columns=['a'])
def append_dataset(self, x):
temp_dataframe = pd.DataFrame(data=x, columns=['a'])
self.main_dataframe = self.main_dataframe.append(temp_dataframe)
def debug(self):
print(self.main_dataframe)
# a
# 0 2
# 1 4
if __name__ == "__main__":
k = Result()
k.append_dataset(x=[2, 4])
k.debug()
如何继承 Pandas 类 更多信息在这里Inheriting Pandas
import pandas as pd
class Result(pd.DataFrame):
@property
def _constructor(self):
return Result
if __name__ == "__main__":
k = Result(data=[2, 4], columns=['a'])
tem_data = pd.DataFrame(data=[5, 6], columns=['a'])
k = k.append(tem_data)
print(k)
【讨论】:
谢谢@Aybars。有没有办法保持继承结构?即 Result 继承自 pd.DataFrame? @TimMak,是的,你可以。我已经更新了我的答案。我希望它会有所帮助。您可以在pandas.pydata.org/pandas-docs/stable/… 找到有关它的更多信息 @TimMak,如果帖子回答了您的问题,请接受它作为解决方案。 我想我有。以上是关于用 pandas DataFrame 初始化一个类并填充它的主要内容,如果未能解决你的问题,请参考以下文章
创建一个空的 Pandas DataFrame,然后填充它?
Pandas+Python初始化一个全零的Dataframe
Pandas+Python初始化一个全零的Dataframe