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


当前回答

对于数据帧df,可以使用以下任一项:

长度(df.索引)df.形状[0]df[df.columns[0]].count()(==第一列中非NaN值的数量)


再现绘图的代码:

import numpy as np
import pandas as pd
import perfplot

perfplot.save(
    "out.png",
    setup=lambda n: pd.DataFrame(np.arange(n * 3).reshape(n, 3)),
    n_range=[2**k for k in range(25)],
    kernels=[
        lambda df: len(df.index),
        lambda df: df.shape[0],
        lambda df: df[df.columns[0]].count(),
    ],
    labels=["len(df.index)", "df.shape[0]", "df[df.columns[0]].count()"],
    xlabel="Number of rows",
)

其他回答

假设df是您的数据帧,那么:

count_row = df.shape[0]  # Gives number of rows
count_col = df.shape[1]  # Gives number of columns

或者更简洁地说,

r, c = df.shape

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

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

如果要在链接操作的中间获取行数,可以使用:

df.pipe(len)

例子:

row_count = (
      pd.DataFrame(np.random.rand(3,4))
      .reset_index()
      .pipe(len)
)

如果您不想在len()函数中放一个长语句,这可能很有用。

您可以改用__len__(),但__len__)看起来有点奇怪。

使用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)非常可读。

TL;DR使用长度(df)

len()返回列表对象的项数(长度)(也适用于字典、字符串、元组或范围对象)。因此,要获取DataFrame的行计数,只需使用len(df)。有关len函数的更多信息,请参见官方页面。


或者,您可以分别使用df.index和df.columns访问所有行和所有列len(df.index)将给出行数,len(df.columns)将给出列数。

或者,您可以使用df.shape,它一起返回行数和列数(作为元组),在这里您可以使用索引访问每个项。如果要访问行数,请仅使用df.shape[0]。对于列数,请只使用:df.shape[1]。