MetaData
私はpandasに保存するための専用の場所があるべきかどうかについて議論を続けてきましたが、DataFrame
個人的にはこの機能が非常に役立つと思います.
これが将来のバージョンで実装される前に、私は 2 つの回避策を検討しましたが、どれも本当に満足のいくものではないようです。
からクラスを継承することはできないので、を含むクラスを作成し、すべてのメソッドを実装DataFrame
しようとしました... ただし、DataFrame を操作するために使用できるメソッドの数を考えると、これは退屈なアプローチのように思えます。MyDataFrame
DataFrame
__add__
__mul__
さらに、私が操作するデータは物理ハードウェア (スペクトル アナライザー、オシロスコープなど) に由来し、原則として、データフレームの各列に関連付けられた一連のメタデータ (測定帯域幅、平均化数など) が必要です。の構造と 1 対 1 の対応を維持するためにコーディングする必要があるDataFrame
構造は複雑に見えます (DataFrame
が転置された場合はどうなるでしょうか?)
オブジェクトの通常の名前の代わりにカスタム オブジェクトを使用するのが洗練された解決策であることがわかりましたSeries
。これらの「MetaIndex」は基本的に文字列 + メタデータであり、my_dataframe.columns
クラス定義の通常の列ラベルを置き換えます。
class MetaIndex:
def __hash__(self):
return self.str.__hash__()
def __eq__(self,other):
return self.str == str(other)
def __init__(self,st):
self.str = format_name(st)
self._meta = MetaData()
def __repr__(self):
return self.str
def __str__(self):
return self.str
次に、DataFrame
(hdf5ファイルに)保存するときにMetaIndex
、を通常の文字列に変更し、各列のメタデータを個別に保存します。データをロードするときに、データフレームの列を次のように再インスタンス化します。
s.replace_names_by_meta_index()
for c in s.columns:
col = s[c]
if col.meta is not None:
col.meta.set(**f["meta"][str(c)])
1) それは賢明な方法だと思いますか、それとも限界的で危険なアプローチですか?
2) さらに、非常に魅力的な拡張は、MetaIndex を str から継承させることです。このように、オートコンプリートは引き続き IPython ( my_dataframe.col1
) で機能します。ただし、この場合、に含まれるすべてのメタデータを失うような単純な操作がいくつかありますmy_dataframe.T.T
(MetaIndex
あたかもindex._meta
舞台裏で操作が再インストールされたかのようにindex._meta = dict()
)。これは私には非常に不思議に見えます。それが、アプローチ全体について心配している理由でもあります。
そこで何が起こっているのか手がかりはありますか?前もって感謝します, 宜しくお願いします, サミュエル