python - 如何用名称腌制熊猫数据框
问题描述
我想pandas
用名称腌制 DataFrame。但它似乎失败了,如下所示。
请告诉我如何用名称腌制 DataFrame。
熊猫版本:0.23.4
输入:
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
和load
api 是以下实现:
def save(obj):
return (obj.__class__, obj.__dict__)
def load(cls, attributes):
obj = cls.__new__(cls)
obj.__dict__.update(attributes)
return obj
__dict__
in 类没有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)
推荐阅读
- r - 基于另一个表创建条件列
- iframe - 如何从 iFrame 内的元素中捕获动态内容?
- javascript - 如何在javascript中跨月获得一周的第一天和最后一天
- javascript - 尝试更改输入 onChange 时遇到状态错误
- java - 为特定的 YouTube 订阅生成视频上传列表
- java - 消息中不需要记录器参数的结构化日志记录
- django-forms - django-crispy-forms bootstrap 4:如何水平显示复选框?
- logging - 将 kubernetes pod 上特定路径的日志转发到标准输出
- windows - 如何在 VB6 中包含 SDK 例程?
- apache-kafka - 使用 Kafka Stream 和 Windowed Stream 生成统计事件,但如果有最近的事件,则跳过一些窗口事件