我想用名字来挑选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)








暂无数据