热线电话:13121318867

登录
2019-03-11 阅读量: 810
如何用名称来挑选pandas DataFrame

我想用名字来挑选pandas DataFrame。但是,如下所示,它似乎失败了。

请告诉我如何使用名称pickle DataFrame。

熊猫版:0.23.4

Thnaks。

输入

df = pd.DataFrame({'a':[0,1]})

df.name = 'test'

print(df.name)

with open('../data/intermediate/test.pickle', 'wb') as f:

pickle.dump(df, f)

with open('../data/intermediate/test.pickle', 'rb') as f:

test = pickle.load(f)

print(test.name)

产量

test

---------------------------------------------------------------------------

AttributeError Traceback (most recent call last)

<ipython-input-4-22a78fcd97e8> in <module>()

7 with open('../data/intermediate/test.pickle', 'rb') as f:

8 test = pickle.load(f)

----> 9 print(test.name)

~\Anaconda3\lib\site-packages\pandas\core\generic.py in __getattr__(self, name)

4374 if self._info_axis._can_hold_identifiers_and_holds_name(name):

4375 return self[name]

-> 4376 return object.__getattribute__(self, name)

4377

4378 def __setattr__(self, name, value):

AttributeError: 'DataFrame' object has no attribute 'name'

解决办法:在pickle框架中,save和loadapi是以下实现:

def save(obj):

return (obj.__class__, obj.__dict__)

def load(cls, attributes):

obj = cls.__new__(cls)

obj.__dict__.update(attributes)

return obj

本__dict__类DataFrame没有属性name,所以它不会被更新。

如果要挑选自定义属性,可以使用自定义DataFrame类实现name。看起来像:

class AdvancedDataFrame(pd.DataFrame):

def __init__(self, *args, **kwargs):

self.name = kwargs.pop('name') if 'name' in kwargs else None

super(AdvancedDataFrame, self).__init__(*args, **kwargs)

11.0829
3
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子