我只是在玩弄,发现这很有趣:
>>> import pandas as pd
>>> df = pd.DataFrame({'col1': [1, 2], 'col2': [3, 4]})
>>> x = set(df)
>>> x
{'col2', 'col1'}
为什么熊猫返回列名作为设置值?
答案 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_axis
,Series
和DataFrame
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