Pandas数据帧行为:list(df)与len(df)

时间:2017-10-05 00:47:27

标签: python dataframe behavior

我有一个数据框:

import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})

如果我在这个对象上调用list,我就明白了:

>>> list(df)
['A', 'B']

但如果我在这个对象上调用len,我就明白了:

>>> len(df)
3

后一个len调用对我来说更直观 - 就像在迭代中查找元素的数量一样。我不清楚pandas.DataFrame上这两个函数调用背后的行为的确切差异。 dis.dis的输出看起来非常相似:

>>> dis.dis('len(df)')
  1           0 LOAD_NAME                0 (len)
              2 LOAD_NAME                1 (df)
              4 CALL_FUNCTION            1
              6 RETURN_VALUE
>>> dis.dis('list(df)')
  1           0 LOAD_NAME                0 (list)
              2 LOAD_NAME                1 (df)
              4 CALL_FUNCTION            1
              6 RETURN_VALUE

所以我没有任何迹象表明为什么在DataFrame上调用list会返回列名列表,而len返回对象中的行数。当我致电len(df)时,DataFrame上会调用this method吗?

注意:listlen函数比较只是一个示例。我真的在寻找有关pandas.DataFrame在与各种功能接口时如何互动/表现的信息。

1 个答案:

答案 0 :(得分:2)

这是__len__ pandas对象中DataFrame的定义:

def __len__(self):
    return len(self.index)

如预期的那样,你会得到行数#(我猜设计决定?)

对于list(df),它与__iter__返回的内容有关,在这种情况下,您可以将其追溯到NDFrame,这是数据帧的基类,它说:

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

其中_info_axis是DataFrames的列轴。