我有一个数据框:
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吗?
注意:list
和len
函数比较只是一个示例。我真的在寻找有关pandas.DataFrame
在与各种功能接口时如何互动/表现的信息。
答案 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的列轴。