我知道使用熊猫时继承是not the simplest alternative,但我很好奇如何获得我想要的结果。
假设我有一个函数,从字符串返回一个字典(字符串可以是路径,集合的名称......):
def str_to_dict(string):
...
dic = str_to_dict(s1)
dic
>>> {'col_1' : ['a','b',...], 'col2': [1, 2, ...]
我想要做的是创建一个pandas.DataFrame
的子类,它包含dic
的数据,同时使用上面的方法通过字符串初始化,并将字符串保留为属性。
我知道简单地将字典传递到pandas.DataFrame
会对某些情况有效,但我可能需要更改方向(键是索引而不是列名),所以我想使用{{ 1}}构造函数来获取我的DataFrame。
以下是我的工作:
from_dict
再一次,我知道有继承的替代方案,我可能会继续进行我的项目,但我很好奇如何才能使它工作
答案 0 :(得分:1)
此处详细阐述了您尝试不起作用的原因:
https://github.com/pandas-dev/pandas/issues/2859
这不会起作用,因为它不会返回你的实例 子类。 (这里有一堆问题):
# Works but only if you want the keys of the dictionary to be the columns class MySubClass(pandas.DataFrame): def __init__(self, string): self.my_string_attribute = string dic = str_to_dict(string) pandas.DataFrame.__init__(dic)
所以你可以做的是为pd.DataFrame类添加这样的功能:
import ast
def str_to_dict(string):
return ast.literal_eval(string)
class MySubClass(pd.DataFrame):
def from_str(self, string):
df_obj = super().from_dict(str_to_dict(string))
df_obj.my_string_attribute = string
return df_obj
data = "{'col_1' : ['a','b'], 'col2': [1, 2]}"
obj = MySubClass().from_str(data)
type(obj)
# __main__.MySubClass
obj.my_string_attribute
# "{'col_1' : ['a','b'], 'col2': [1, 2]}"