Pandas 数据帧行为:list(df) 与 len(df)
Pandas dataframe behavior: list(df) versus len(df)
我有一个数据框:
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 returns 上调用 list
列名列表,而 len
returns 中的行数物体。当我调用 len(df)
时,是否在 DataFrame
上调用了 this method?
注意:list
和len
函数比较只是一个例子。我真的在寻找有关如何 pandas.DataFrame
s interact/behave 与各种功能交互的信息。
这是__len__
在pandas
DataFrame
对象中的定义:
def __len__(self):
return len(self.index)
正如预期的那样,您得到了行数(我猜是设计决定?)
至于list(df)
,它和__iter__
returns有什么关系,这里可以追溯到NDFrame
,它是NDFrame
的基类数据框,它说:
def __iter__(self):
"""Iterate over infor axis"""
return iter(self._info_axis)
其中 _info_axis
是数据帧的列轴。
我有一个数据框:
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 returns 上调用 list
列名列表,而 len
returns 中的行数物体。当我调用 len(df)
时,是否在 DataFrame
上调用了 this method?
注意:list
和len
函数比较只是一个例子。我真的在寻找有关如何 pandas.DataFrame
s interact/behave 与各种功能交互的信息。
这是__len__
在pandas
DataFrame
对象中的定义:
def __len__(self):
return len(self.index)
正如预期的那样,您得到了行数(我猜是设计决定?)
至于list(df)
,它和__iter__
returns有什么关系,这里可以追溯到NDFrame
,它是NDFrame
的基类数据框,它说:
def __iter__(self):
"""Iterate over infor axis"""
return iter(self._info_axis)
其中 _info_axis
是数据帧的列轴。