Python 将数据源信息附加到熊猫系列

Python 将数据源信息附加到熊猫系列,python,pandas,metadata,series,Python,Pandas,Metadata,Series,是否有方法将数据源的信息附加到熊猫系列?目前,我只是在dataframe中添加列,这些列指示每个变量的源 非常感谢您的想法和建议 与大多数Python对象一样,可以使用句点()语法添加属性。但是,您应该注意属性名称不会与标签冲突。下面是一个演示: import pandas as pd s = pd.Series(list(range(3)), index=list('abc')) s.a = 10 s.d = 20 print(s.a, s.d) 10 20 print(s) a

是否有方法将数据源的信息附加到熊猫系列?目前,我只是在dataframe中添加列,这些列指示每个变量的源


非常感谢您的想法和建议

与大多数Python对象一样,可以使用句点(
)语法添加属性。但是,您应该注意属性名称不会与标签冲突。下面是一个演示:

import pandas as pd

s = pd.Series(list(range(3)), index=list('abc'))
s.a = 10
s.d = 20

print(s.a, s.d)

10 20

print(s)

a    10
b     1
c     2
如上所述,当您实际上想要添加
属性时,可能会无意中覆盖标签的值。如前所述,缓解此问题的一种方法是执行简单的检查:

if 'a' not in s:
    s.a = 100
else:
    print('Attempt to overwrite label when setting attribute aborted!')
    # or raise a custom error
请注意,如上所述,对数据帧(如
GroupBy
pivot
等)的操作可能会返回已删除属性的数据副本

最后,为了存储数据框或附带元数据的系列,您可能希望考虑HDF5。例如,请参见官方文件中的。

要使原始数据结构具有附加属性,您应该 让熊猫知道添加了哪些属性<代码>熊猫
地图未知 数据名的属性重写
\uuuu getattribute\uuuu
。决定性的 原始属性可以通过以下两种方式之一完成:

  • 为临时属性定义
    \u internal\u names
    \u internal\u names\u set
    ,这些临时属性不会传递给操作结果

  • 为将传递给操作结果的正常属性定义
    \u元数据

  • 下面是定义两个原始属性的示例, “内部_缓存”作为临时属性,“添加_属性”作为临时属性 正常性质

    class SubclassedDataFrame2(DataFrame):
    
        # temporary properties
        _internal_names = pd.DataFrame._internal_names + ['internal_cache']
        _internal_names_set = set(_internal_names)
    
        # normal properties
        _metadata = ['added_property']
    
    @property
    def _constructor(self):
        return SubclassedDataFrame2
    
    _

    >>> df = SubclassedDataFrame2({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
    >>> df
       A  B  C
    0  1  4  7
    1  2  5  8
    2  3  6  9
    
    >>> df.internal_cache = 'cached'
    >>> df.added_property = 'property'
    
    >>> df.internal_cache
    cached
    >>> df.added_property
    property
    
    # properties defined in _internal_names is reset after manipulation
    >>> df[['A', 'B']].internal_cache
    AttributeError: 'SubclassedDataFrame2' object has no attribute 'internal_cache'
    
    # properties defined in _metadata are retained
    >>> df[['A', 'B']].added_property
    property
    

    正如您所看到的,通过
    \u metadata
    定义自定义属性的好处是,在(大多数)一对一数据帧操作期间,属性将自动传播。请注意,在多对一数据帧操作期间(例如,
    merge()
    concat()
    ),您的自定义属性仍将丢失。

    整个系列是否有一个源,或者每行/标签是否有不同的源?整个系列都将是相同的。
    dataframe
    中添加属性,不适用于其
    系列
    对象…@MicheldeRuiter从
    数据帧
    创建的
    系列
    对象(例如通过切片)实际上不会继承数据帧的元数据属性。当然可以,但它不能回答(和我的)问题。