认为df
那么是你的数据框:
count_row = df.shape[0] # Gives number of rows
count_col = df.shape[1] # Gives number of columns
或者,更简洁地说,
r, c = df.shape
如果数据集很大,如果您只需要行数,则 len (df.index) 比 df.shape[0] 快得多。我测试了它。
为什么我的 DataFrame 上没有 shape 方法?
@ArdalanShahgholi 可能是因为返回的是一个系列,它总是一维的。因此,只有len(df.index)
将工作
@Connor我需要从我的DF中获得行数和列数。在我的 DF 中,我也有一个选择,这意味着我有一张桌子,现在的问题是为什么我的 DF 上没有 SHAPE 功能?
很好的问题,将其作为一个单独的问题,分享您尝试过的内容以及您看到的结果(提供一套完整的工作代码,其他人可以轻松复制),然后在此处分享该问题的链接。我看看能不能帮忙
@ArdalanShahgholishape
不是一个函数是一个属性,你可以发现比较df.shape
和df.shape()
在你的 df.
@康纳df.A.shape[0]
或者df.loc[:,'A'].shape[0]
为系列工作。
利用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)
可读性强。
如何获取 Pandas DataFrame 的行数?
此表总结了您希望在 DataFrame(或 Series,为了完整性)中计算某些内容的不同情况,以及推荐的方法。
脚注
DataFrame.count
返回每列的计数作为Series
因为非空计数因列而异。DataFrameGroupBy.size
返回一个Series
,因为同一组中的所有列共享相同的行数。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.size
和len(s.index)
速度上是差不多的。但我推荐len(df)
.
笔记
size
是一个属性,它返回元素的数量(=任何系列的行数)。 DataFrames 还定义了一个 size 属性,它返回相同的结果df.shape[0] * df.shape[1]
.
非空行数:DataFrame.count
和Series.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
在特定列上调用。
s.shape[0]
为系列中的行数工作。
你好,你能看看这个问题吗stackoverflow.com/questions/70954791/…
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]
.
@BrendanMetcalfe,我不知道你的数据框可能有什么问题,而没有看到它的数据。你可以检查小脚本 end 看看,确实len
适用于获取行数。这是脚本onecompiler.com/python/3xc9nuvrx
除了以前的答案,您可以使用df.axes
获取具有行和列索引的元组,然后使用len()
功能:
total_rows = len(df.axes[0])
total_cols = len(df.axes[1])
这将返回索引对象,这些对象可能是也可能不是原始对象的副本,如果您只是在检查长度后丢弃它们,这是一种浪费。除非您打算对索引做任何其他事情,不使用.
好的,我发现,我应该调用方法而不是检查属性,所以它应该是 df.count() 没有 df.count
^ 危险!请注意
df.count()
只会返回每列的非 NA/NaN 行数。你应该使用df.shape[0]
相反,它将始终正确地告诉您行数。请注意,当数据框为空时,df.count 不会返回 int(例如,pd.DataFrame(columns=[“Blue”,”Red”).count 不是 0)
可以使用 df.info() 来获取行数(# 个条目)、每列中非空条目的数量、dtypes 和内存使用情况。 df的完整图片。如果您正在寻找一个数字,您可以通过编程方式使用 df.shape[0]。