我正在构建一个数据库类型的对象,当找不到索引时,该对象使用api来检索信息,将其保存到对象/文件中并返回它。
我想通过重载.loc[x, y]
pandas DataFrame的方法来做到这一点,但我不知道如何做到这一点!
目前,我有:
import pandas as pd
pd.set_option('io.hdf.default_format','table')
class DataBase(pd.DataFrame):
"""DataBase Object which can be updated by external api"""
def __init__(self, path, api=None):
super(DataBase, self).__init__(pd.read_hdf('store.h5','df'))
self.api = api
我可能想更改该__init__
函数以包含一个where
参数,以便我只能阅读需要的内容。
我想不出一种方法来.loc
适当地重载该方法!
另外,hdf5只是一种方法。我想保留使用任何其他存储方法(如sql,甚至在必要时使用csv)的功能
loc
是一个创建的属性,_loc
如果没有创建,则返回一个名为的名称,None
否则将创建一个pandas.core.indexing._LocIndexer
按需的名称。默认情况下,索引器可以访问创建它们的数据框,因此您可以在未命中键时修改数据框。
您可以DataFrame.loc
通过子类化DataFrame
和_LocIndexer
as来覆盖的行为。
class MyLocIndexer(_LocIndexer):
def __getitem__(self, key):
try:
return super().__getitem__(key)
except KeyError:
item = db.fetch_item(key)
self[key] = item
return item
# `return self[key]' is better as it also works when accessing a
# whole axis
class MyDataFrame(DataFrame):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._loc = MyLocIndexer(self, "loc")
上面的代码是用python3编写的,因此如果您使用的是python2,则必须修复super语句。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句