问答中心分类: DATABASE如何获取 Pandas DataFrame 的行数?
0
匿名用户 提问 5小时 前

如何获取熊猫数据框的行数df?

yemu 回复 5小时 前

好的,我发现,我应该调用方法而不是检查属性,所以它应该是 df.count() 没有 df.count

yemu 回复 5小时 前

^ 危险!请注意df.count()只会返回每列的非 NA/NaN 行数。你应该使用df.shape[0]相反,它将始终正确地告诉您行数。

yemu 回复 5小时 前

请注意,当数据框为空时,df.count 不会返回 int(例如,pd.DataFrame(columns=[“Blue”,”Red”).count 不是 0)

yemu 回复 5小时 前

可以使用 df.info() 来获取行数(# 个条目)、每列中非空条目的数量、dtypes 和内存使用情况。 df的完整图片。如果您正在寻找一个数字,您可以通过编程方式使用 df.shape[0]。

16 Answers
0
Nasir Shah 回答 5小时 前

认为df那么是你的数据框:

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

或者,更简洁地说,

r, c = df.shape
Sumit Pokhrel 回复 5小时 前

如果数据集很大,如果您只需要行数,则 len (df.index) 比 df.shape[0] 快得多。我测试了它。

Ardalan Shahgholi 回复 5小时 前

为什么我的 DataFrame 上没有 shape 方法?

Connor 回复 5小时 前

@ArdalanShahgholi 可能是因为返回的是一个系列,它总是一维的。因此,只有len(df.index)将工作

Ardalan Shahgholi 回复 5小时 前

@Connor我需要从我的DF中获得行数和列数。在我的 DF 中,我也有一个选择,这意味着我有一张桌子,现在的问题是为什么我的 DF 上没有 SHAPE 功能?

Connor 回复 5小时 前

很好的问题,将其作为一个单独的问题,分享您尝试过的内容以及您看到的结果(提供一套完整的工作代码,其他人可以轻松复制),然后在此处分享该问题的链接。我看看能不能帮忙

rubengavidia0x 回复 5小时 前

@ArdalanShahgholishape不是一个函数是一个属性,你可以发现比较df.shapedf.shape()在你的 df.

rubengavidia0x 回复 5小时 前

@康纳df.A.shape[0]或者df.loc[:,'A'].shape[0]为系列工作。

0
Dr. Jan-Philip Gehrcke 回答 5小时 前

利用len(df):-)。
__len__()记录在“返回索引长度”中。
计时信息,设置方式与中相同根的回答

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)可读性强。

0
cs95 回答 5小时 前

如何获取 Pandas DataFrame 的行数?

此表总结了您希望在 DataFrame(或 Series,为了完整性)中计算某些内容的不同情况,以及推荐的方法。
在此处输入图像描述

脚注

  1. DataFrame.count返回每列的计数作为Series因为非空计数因列而异。
  2. DataFrameGroupBy.size返回一个Series,因为同一组中的所有列共享相同的行数。
  3. DataFrameGroupBy.count返回一个DataFrame,因为非空计数可能在同一组中的列之间有所不同。要获取特定列的分组非空计数,请使用df.groupby(...)['x'].count()其中“x”是要计数的列。

最少的代码示例
下面,我展示了上表中描述的每种方法的示例。首先,设置 –

df = pd.DataFrame({
    'A': list('aabbc'), 'B': ['x', 'x', np.nan, 'x', np.nan]})
s = df['B'].copy()

df

   A    B
0  a    x
1  a    x
2  b  NaN
3  b    x
4  c  NaN

s

0      x
1      x
2    NaN
3      x
4    NaN
Name: B, dtype: object

数据帧的行数:len(df),df.shape[0], 或者len(df.index)

len(df)
# 5

df.shape[0]
# 5

len(df.index)
# 5

比较恒定时间操作的性能似乎很愚蠢,尤其是当差异在“认真,别担心”的级别时。但这似乎是其他答案的趋势,所以为了完整性,我也在做同样的事情。
以上三种方法中,len(df.index)(如其他答案中所述)是最快的。

笔记

  • 上述所有方法都是常数时间操作,因为它们是简单的属性查找。
  • df.shape(如同ndarray.shape) 是一个返回元组的属性(# Rows, # Cols).例如,df.shape返回(8, 2)对于此处的示例。

DataFrame 的列数:df.shape[1],len(df.columns)

df.shape[1]
# 2

len(df.columns)
# 2

类似于len(df.index),len(df.columns)是两种方法中较快的一种(但需要输入更多字符)。
系列的行数:len(s),s.size,len(s.index)

len(s)
# 5

s.size
# 5

len(s.index)
# 5

s.sizelen(s.index)速度上是差不多的。但我推荐len(df).

笔记
size是一个属性,它返回元素的数量(=任何系列的行数)。 DataFrames 还定义了一个 size 属性,它返回相同的结果df.shape[0] * df.shape[1].

非空行数:DataFrame.countSeries.count
这里描述的方法只计算非空值(意味着 NaN 被忽略)。
打电话DataFrame.count将返回非 NaN 计数每个柱子:

df.count()

A    5
B    3
dtype: int64

对于系列,使用Series.count达到类似的效果:

s.count()
# 3

分组行数:GroupBy.size
为了DataFrames, 利用DataFrameGroupBy.size计算每组的行数。

df.groupby('A').size()

A
a    2
b    2
c    1
dtype: int64

同样,对于Series,你将使用SeriesGroupBy.size.

s.groupby(df.A).size()

A
a    2
b    2
c    1
Name: B, dtype: int64

在这两种情况下,一个Series被退回。这对DataFrames以及因为所有组共享相同的行数。
分组非空行数:GroupBy.count
与上面类似,但使用GroupBy.count, 不是GroupBy.size.注意size总是返回一个Series, 尽管count返回一个Series如果在特定列上调用,否则DataFrame.
以下方法返回相同的内容:

df.groupby('A')['B'].size()
df.groupby('A').size()

A
a    2
b    2
c    1
Name: B, dtype: int64

同时,对于count, 我们有

df.groupby('A').count()

   B
A
a  2
b  1
c  0

…调用整个 GroupBy 对象,与,

df.groupby('A')['B'].count()

A
a    2
b    1
c    0
Name: B, dtype: int64

在特定列上调用。

rubengavidia0x 回复 5小时 前

s.shape[0]为系列中的行数工作。

Aaditya Ura 回复 5小时 前

你好,你能看看这个问题吗stackoverflow.com/questions/70954791/…

0
Memin 回答 5小时 前

TL;博士利用len(df)
len()返回列表对象的项目数(长度)(也适用于字典、字符串、元组或范围对象)。因此,要获取 DataFrame 的行数,只需使用len(df).更多关于功能,见官方页面.

或者,您可以访问所有行和所有列df.index, 和df.columns,分别。由于您可以使用len(anyList)获取元素编号,使用len(df.index)将给出行数,并且len(df.columns)将给出列数。
或者,您可以使用df.shape它返回一起(作为元组)的行数和列数,您可以在其中访问每个项目及其索引。如果要访问行数,请仅使用df.shape[0].对于列数,仅使用:df.shape[1].

Memin 回复 5小时 前

@BrendanMetcalfe,我不知道你的数据框可能有什么问题,而没有看到它的数据。你可以检查小脚本 end 看看,确实len适用于获取行数。这是脚本onecompiler.com/python/3xc9nuvrx

0
Nik 回答 5小时 前

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

total_rows = len(df.axes[0])
total_cols = len(df.axes[1])
cs95 回复 5小时 前

这将返回索引对象,这些对象可能是也可能不是原始对象的副本,如果您只是在检查长度后丢弃它们,这是一种浪费。除非您打算对索引做任何其他事情,不使用.