如何获取panda数据帧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]。

其他回答

…建立在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]快

这两种方法都可以做到(df是DataFrame的名称):

方法1:使用len函数:

len(df)将给出名为df的DataFrame中的行数。

方法2:使用计数函数:

df[col].count()将计算给定列col中的行数。

df.count()将给出所有列的行数。

对于dataframe df,在浏览数据时使用的打印逗号格式的行计数:

def nrow(df):
    print("{:,}".format(df.shape[0]))

例子:

nrow(my_df)
12,456,789

如何获取Pandas DataFrame的行计数?

本表总结了您希望在DataFrame(或Series,为完整性起见)中计算某些内容的不同情况,以及推荐的方法。

脚注DataFrame.count将每个列的计数作为一个系列返回,因为非空计数因列而异。DataFrameGroupBy.size返回一个系列,因为同一组中的所有列共享相同的行计数。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

DataFrame的行计数: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是一个属性,它返回元素的数量(=count任何系列的行数)。DataFrames还定义了一个大小属性返回与df.shape[0]*df.shape[1]相同的结果。

非空行计数:DataFrame.Count和Series.Count

这里描述的方法只计算非空值(意味着忽略NaN)。

调用DataFrame.count将返回每列的非NaN计数:

df.count()

A    5
B    3
dtype: int64

对于“系列”,请使用“系列计数”以产生类似效果:

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如果在特定列上调用,则返回一个Serial,否则返回一个DataFrame。

以下方法返回相同的结果:

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

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

同时,伯爵,我们有

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

在特定列上调用。

len(df.index)将是列出的所有方法中工作最快的