【问题标题】:Python Dataframe Adding a description to columnPython Dataframe 向列添加描述
【发布时间】:2020-10-12 19:47:46
【问题描述】:

我想向一列添加描述,例如我收集此数据的数据源。这样的事情可能吗?大约 8 年前,Adding my own description attribute to a Pandas DataFrame 曾有人问过类似的问题,但没有答案。

我的代码:

df=
     
index            colA          colB
#description     from SensorA   SensorB   # Description row 
1
2
3

【问题讨论】:

  • 我能想到的最简单的解决方案是为每个列单独设置.name 属性,例如df['colA'].name='from SensorA',或者是属性必须使用它自己的自定义的答案的要求属性?
  • @G.Anderson 这样我们就可以保存它了吗?我的意思是我们将数据框保存为 csv 或 excel 文件?
  • 如果您希望以上述格式将描述写入文件,您也可以将其作为多索引添加到列中,例如df.columns=pd.MultiIndex.from_tuples(zip(df.columns,['from SensorA', 'SensorB']))。然后它总是作为附加列标题可见,并且可以这样写入文件。比下面的答案复杂得多,但有效的 IMO

标签: python pandas dataframe


【解决方案1】:

pandas-dev/pandas#2485 的评论建议使用_metadata.attrs。请参阅https://pandas.pydata.org/pandas-docs/stable/development/extending.html#define-original-properties 了解更多信息。

一种方法是继承pandas.DataFrame 并添加_metadata

为将传递给操作结果的普通属性定义 _metadata

import pandas as pd

class SubclassedDataFrame(pd.DataFrame):

    # normal properties
    _metadata = ['description']

    @property
    def _constructor(self):
        return SubclassedDataFrame

data = {"a": [1, 2, 3], "b": [10, 12, 13]}

df = SubclassedDataFrame(data)

df.description = "About my data"

在子类中设置_metadata 表示这些属性应该在操作后传播。请参阅下面使用 .head() 的示例,以演示 pd.DataFrame 与此子类之间的区别。

data = {"a": [1, 2, 3], "b": [10, 12, 13]}

df = SubclassedDataFrame(data)
df.description = "About my data"
df.head().description  # prints 'About my data'

df_orig = pd.DataFrame(data)
df_orig.description = "About my data"
df_orig.head().description  # raises AttributeError

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 2021-10-19
    • 2021-10-06
    相关资源
    最近更新 更多