为什么一组熊猫数据框返回该数据框的列名?

时间:2018-10-11 20:01:28

标签: python pandas set

我只是在玩弄,发现这很有趣:

>>> import pandas as pd
>>> df = pd.DataFrame({'col1': [1, 2], 'col2': [3, 4]})
>>> x = set(df)
>>> x
{'col2', 'col1'}

为什么熊猫返回列名作为设置值?

2 个答案:

答案 0 :(得分:1)

因为这是在source code中为NDFrame定义__iter__的方式,其中pd.DataFrame是孩子:

def __iter__(self):
    """Iterate over infor axis"""
    return iter(self._info_axis)

pd.DataFrame._info_axis在内部用于存储列标签:

df = pd.DataFrame(columns=list('abcd'))

df._info_axis # Index(['a', 'b', 'c', 'd'], dtype='object')

set通过pd.DataFrame迭代__iter__实例,对每个元素进行哈希处理,并返回与唯一列标签对应的值set

答案 1 :(得分:1)

您可以找到__iter__ in DataFrame's parent class NDFrame的实现:

def __iter__(self):
    """Iterate over infor axis"""
    return iter(self._info_axis)

它与在同一位置定义的DataFrame上调用keys基本上相同。我将其包含在此处是因为文档字符串更有用,它描述了_info_axisSeriesDataFrame

Panel中的区别
def keys(self):
    """Get the 'info axis' (see Indexing for more)
    This is index for Series, columns for DataFrame and major_axis for
    Panel.
    """
    return self._info_axis