4

Pandas データフレームを多用しています。また、データフレームの発生時刻、データフレームの追加の説明などを記録するなど、データフレームにいくつかのデータを添付する必要があります。

データを保持するためのデータフレーム クラスの予約済みフィールドが見つかりません。

そこで、問題を解決するためにファイルを変更しcore\frame.pyて行を追加します。_reserved_slot = {}ここに質問を投稿するのは、そうしても大丈夫ですか?または、メタデータをデータフレーム/列/行などに添付するより良い方法はありますか?

#----------------------------------------------------------------------
# DataFrame class


class DataFrame(NDFrame):
    _auto_consolidate = True
    _verbose_info = True
    _het_axis = 1
    _col_klass = Series

    _AXIS_NUMBERS = {
        'index': 0,
        'columns': 1
    }

    _reserved_slot = {}  # Add by bigbug to keep extra data for dataframe

    _AXIS_NAMES = dict((v, k) for k, v in _AXIS_NUMBERS.iteritems()) 

EDIT : (witingkuo の方法のデモ メッセージを追加)

>>> df = pd.DataFrame(np.random.randn(10,5), columns=list('ABCDEFGHIJKLMN')[0:5])
>>> df
        A       B       C       D       E
0  0.5890 -0.7683 -1.9752  0.7745  0.8019
1  1.1835  0.0873  0.3492  0.7749  1.1318
2  0.7476  0.4116  0.3427 -0.1355  1.8557
3  1.2738  0.7225 -0.8639 -0.7190 -0.2598
4 -0.3644 -0.4676  0.0837  0.1685  0.8199
5  0.4621 -0.2965  0.7061 -1.3920  0.6838
6 -0.4135 -0.4991  0.7277 -0.6099  1.8606
7 -1.0804 -0.3456  0.8979  0.3319 -1.1907
8 -0.3892  1.2319 -0.4735  0.8516  1.2431
9 -1.0527  0.9307  0.2740 -0.6909  0.4924
>>> df._test = 'hello'
>>> df2 = df.shift(1)
>>> print df2._test
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\Python\lib\site-packages\pandas\core\frame.py", line 2051, in __getattr__
    (type(self).__name__, name))
AttributeError: 'DataFrame' object has no attribute '_test'
>>> 
4

3 に答える 3

3

これは現在サポートされていません。https://github.com/pydata/pandas/issues/2485を参照してください。その理由は、これらの属性の伝播が自明ではないためです。確かにデータを割り当てることができますが、ほとんどすべての pandas 操作は、割り当てられたデータが失われる新しいオブジェクトを返します。

于 2013-04-03T12:49:52.893 に答える
1

あなた_reserved_slotはクラス変数になります。別の値を別のに割り当てたい場合、それはうまくいかないかもしれませんDataFrame。おそらく、必要なものをインスタンスに直接割り当てることができます。

In [6]: import pandas as pd

In [7]: df = pd.DataFrame()

In [8]: df._test = 'hello'

In [9]: df._test
Out[9]: 'hello'
于 2013-04-03T11:51:12.000 に答える
0

まともな回避策は、データ名をメタデータを他のキーとして辞書に入れることだと思います。したがって、次のようなキャッシュフローを含むデータフレームがある場合:

df = pd.DataFrame({'Amount': [-20, 15, 25, 30, 100]},index=pd.date_range(start='1/1/2018', periods=5))

追加のメタデータを使用して辞書を作成し、そこにデータフレームを配置できます

out = {'metadata': {'Name': 'Whatever', 'Account': 'Something else'}, 'df': df}

そしてそれを次のように使用しますout[df]

于 2018-08-29T21:07:52.957 に答える