如何获取panda数据帧df的行数?


当前回答

使用len(df):-)。

__len__()记录了“返回索引长度”。

计时信息,设置方式与root的答案相同:

In [7]: timeit len(df.index)
1000000 loops, best of 3: 248 ns per loop

In [8]: timeit len(df)
1000000 loops, best of 3: 573 ns per loop

由于有一个额外的函数调用,当然可以说它比直接调用len(df.index)慢一点。但在大多数情况下,这并不重要。我发现len(df)非常可读。

其他回答

使用len(df)或len(df.index)时,可能会遇到以下错误:

----> 4 df['id'] = np.arange(len(df.index)
TypeError: 'int' object is not callable

解决方案:

lengh = df.shape[0]

使用len(df):-)。

__len__()记录了“返回索引长度”。

计时信息,设置方式与root的答案相同:

In [7]: timeit len(df.index)
1000000 loops, best of 3: 248 ns per loop

In [8]: timeit len(df)
1000000 loops, best of 3: 573 ns per loop

由于有一个额外的函数调用,当然可以说它比直接调用len(df.index)慢一点。但在大多数情况下,这并不重要。我发现len(df)非常可读。

您也可以这样做:

假设df是您的数据帧。然后df.shape为您提供数据帧的形状,即(行,列)

因此,分配以下命令以获得所需的

 row = df.shape[0], col = df.shape[1]

除了前面的答案之外,您还可以使用df.axes获取具有行和列索引的元组,然后使用len()函数:

total_rows = len(df.axes[0])
total_cols = len(df.axes[1])

…建立在Jan Philip Gehrcke的答案之上。

len(df)或len(df.index)比df.shape[0]更快的原因是:

看看代码。df.shape是一个@属性,它运行两次调用len的DataFrame方法。

df.shape??
Type:        property
String form: <property object at 0x1127b33c0>
Source:
# df.shape.fget
@property
def shape(self):
    """
    Return a tuple representing the dimensionality of the DataFrame.
    """
    return len(self.index), len(self.columns)

在len(df)的罩下

df.__len__??
Signature: df.__len__()
Source:
    def __len__(self):
        """Returns length of info axis, but here we use the index """
        return len(self.index)
File:      ~/miniconda2/lib/python2.7/site-packages/pandas/core/frame.py
Type:      instancemethod

len(df.index)将比len(df)稍快,因为它少了一个函数调用,但这总是比df.shape[0]快