如何获取Pandas DataFrame的行数

如何获取Pandas DataFrame的行数

在数据分析工作中,经常需要获取 Pandas DataFrame 的行数。以下将介绍多种获取行数的方法及相关情况。

实现步骤

1. 使用 len(df.index)

1
2
3
4
5
6
import pandas as pd

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6]}
df = pd.DataFrame(data)
row_count = len(df.index)
print(row_count)

这种方法直接获取索引的长度,通常在性能上表现较好,尤其在最终优化的代码中是最快的运行时选择。

2. 使用 df.shape[0]

1
2
3
4
5
6
import pandas as pd

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6]}
df = pd.DataFrame(data)
row_count = df.shape[0]
print(row_count)

df.shape 返回一个元组,包含 DataFrame 的行数和列数,通过索引 0 可以获取行数。在交互式工作中,添加 .shape[0] 来查看过滤后剩余的行数比较方便。

3. 使用 len(df)

1
2
3
4
5
6
import pandas as pd

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6]}
df = pd.DataFrame(data)
row_count = len(df)
print(row_count)

len(df) 也是常用的方法,可读性较高。在代码编写过程中,如果已经有一个子集化的 DataFrame,使用该方法可以更快速地获取行数。不过,由于存在一个额外的函数调用,它比 len(df.index) 稍慢,但在大多数情况下差异不大。

4. 使用 df[df.columns[0]].count()

1
2
3
4
5
6
import pandas as pd

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6]}
df = pd.DataFrame(data)
row_count = df[df.columns[0]].count()
print(row_count)

此方法返回第一列中非 NaN 值的数量。但它的运行速度较慢,且输入代码较长,一般不建议用于单纯获取行数。

5. 其他特殊情况的方法

  • 使用 df.axes
1
2
3
4
5
6
import pandas as pd

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6]}
df = pd.DataFrame(data)
total_rows = len(df.axes[0])
print(total_rows)

不过,这种方法会返回索引对象,可能会产生不必要的副本,除非有其他使用索引对象的需求,否则不建议使用。

  • 使用 df.pipe(len)
1
2
3
4
5
6
7
8
9
import pandas as pd
import numpy as np

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

该方法适用于在链式操作中获取行数,避免将长语句放在 len() 函数中。

最佳实践

  • 在代码编写阶段,为了方便调试和交互式查看结果,可以使用 len(df)df.shape[0]
  • 在最终优化的代码中,为了追求最快的运行速度,建议使用 len(df.index)

常见问题

1. df.count() 与获取行数的区别

df.count() 会返回每列中非 NaN 值的数量,而不是整个 DataFrame 的行数。例如:

1
2
3
4
5
6
import pandas as pd
import numpy as np

data = {'col1': [1, 2, np.nan], 'col2': [4, np.nan, 6]}
df = pd.DataFrame(data)
print(df.count())

输出结果是每列的非 NaN 值数量。

2. 遇到 'int' object is not callable 错误

当使用 len(df)len(df.index) 时,可能会遇到此错误。这通常是因为将 len 作为变量名使用了。解决方法是使用 df.shape[0] 来获取行数。例如:

1
2
3
4
5
6
import pandas as pd

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6]}
df = pd.DataFrame(data)
length = df.shape[0]
print(length)

3. 性能差异

不同方法在性能上可能存在差异,尤其是在处理大型 DataFrame 时。一般来说,len(df.index) 是最快的,df.shape[0] 次之,len(df) 稍慢,而 df[df.columns[0]].count() 最慢。可以使用 timeit 模块来测试不同方法的性能:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import pandas as pd
import numpy as np
import timeit

data = pd.DataFrame(np.arange(1000 * 3).reshape(1000, 3))

t1 = timeit.timeit(lambda: len(data.index), number=1000)
t2 = timeit.timeit(lambda: data.shape[0], number=1000)
t3 = timeit.timeit(lambda: len(data), number=1000)
t4 = timeit.timeit(lambda: data[data.columns[0]].count(), number=1000)

print(f"len(data.index): {t1} seconds")
print(f"data.shape[0]: {t2} seconds")
print(f"len(data): {t3} seconds")
print(f"data[data.columns[0]].count(): {t4} seconds")

如何获取Pandas DataFrame的行数
https://119291.xyz/posts/2025-04-14.how-to-get-row-count-of-pandas-dataframe/
作者
ww
发布于
2025年4月14日
许可协议