Python 如何获取数据帧的行数?

Python 如何获取数据帧的行数?,python,pandas,dataframe,Python,Pandas,Dataframe,我试图通过Pandas获得数据帧df的行数,下面是我的代码 方法1: 方法2: 这两个代码段都给出了以下错误: TypeError:不支持+:“instancemethod”和“int”的操作数类型 我做错了什么?对于数据帧df,可以使用以下任一选项: len(测向索引) df.shape[0] df[df.columns[0]].count()(速度最慢,但避免在第一列中计算NaN值) 复制绘图的代码: 将numpy导入为np 作为pd进口熊猫 导入性能图 perfplot.save(

我试图通过Pandas获得数据帧df的行数,下面是我的代码

方法1: 方法2: 这两个代码段都给出了以下错误:

TypeError:不支持+:“instancemethod”和“int”的操作数类型


我做错了什么?

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

  • len(测向索引)
  • df.shape[0]
  • df[df.columns[0]].count()
    (速度最慢,但避免在第一列中计算NaN值)


复制绘图的代码:

将numpy导入为np
作为pd进口熊猫
导入性能图
perfplot.save(
“out.png”,
setup=lambda n:pd.数据帧(np.arange(n*3).重塑(n,3)),
n_范围=[2**k表示范围(25)中的k],
果仁=[
λdf:len(测向指数),
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=“行数”,
)
使用
len(df)
:-)

\uuu len\uu()
以“返回索引长度”记录

定时信息,设置方式与中相同:

[7]中的
:时间长度(df.index)
1000000个循环,最好3个:每个循环248纳秒
In[8]:timeit len(df)
1000000个循环,最佳3个:每个循环573纳秒

由于有一个额外的函数调用,可以正确地说,它比直接调用
len(df.index)
要慢一些。但在大多数情况下,这并不重要。我发现
len(df)
非常可读。

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

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

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

count_row = df.shape[0]  # Gives number of rows
count_col = df.shape[1]  # Gives number of columns
或者更简洁地说

r, c = df.shape
TL;博士 简洁、清晰、干净:使用
len(df)


len()
是您的朋友,它可以作为
len(df)
用于行计数

或者,您可以通过
df.index
访问所有行,通过
df.columns
访问所有列,由于您可以使用
len(anyList)
获取列表的计数,请使用
len(df.index)
获取行数,
len(df.columns)
获取列计数

或者,您可以使用
df.shape
返回行数和列数。如果要访问行数,请仅使用
df.shape[0]
。对于列数,只使用:
df.shape[1]

我从背景中了解到熊猫,我发现熊猫在选择行或列时更复杂

我不得不与它搏斗一段时间,然后我找到了一些方法来处理:

获取列数:

len(df.columns)
## Here:
# df is your data.frame
# df.columns returns a string. It contains column's titles of the df.
# Then, "len()" gets the length of it.
获取行数:

len(df.index) # It's similar.

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

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

nrow(my_df)
12,456,789
row_count = (
      pd.DataFrame(np.random.rand(3,4))
      .reset_index()
      .pipe(len)
)
…以…为基础

之所以
len(df)
len(df.index)
df.shape[0]
快:

看看代码。df.shape是一个
@属性
,它运行一个调用
len
两次的数据帧方法

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.index)将比<代码> LEN(DF)略微快一些,因为它有一个更少的函数调用,但总是比DF.St[ 0 ] < /Calp>

< P>快。如果您想在链式操作的中间获得行计数,则可以使用:

df.pipe(len)
例如:

nrow(my_df)
12,456,789
row_count = (
      pd.DataFrame(np.random.rand(3,4))
      .reset_index()
      .pipe(len)
)
如果您不想在
len()
函数中放入长语句,这可能会很有用

你可以用
\uuu len\uuu()
来代替,但是
\uu len\uuu()
看起来有点奇怪

如何获取数据帧的行数? 此表总结了您希望在数据帧(或系列,完整性)中计数的不同情况,以及推荐的方法

脚注

  • 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
    
    数据帧的行计数:
    len(df)
    df.shape[0]
    ,或
    len(df.index)
    比较恒定时间操作的性能似乎很愚蠢,尤其是当差异处于“认真地说,不要担心”的水平时。但这似乎是其他答案的一种趋势,所以我也在做同样的事情以确保完整性

    在上述三种方法中,
    len(df.index)
    (如其他答案所述)是最快的

    注意

    • 以上所有方法都是常量时间操作,因为它们是简单的属性查找
    • df.shape
      (类似于
      ndarray.shape
      )是返回
      (#行,#列)
      元组的属性。例如,
      df.shape
      返回此处示例的
      (8,2)
    数据帧的列计数:
    df.shape[1]
    len(df.columns)
    类似于
    len(df.index)
    len(df.columns)
    是两种方法中速度更快的一种(但需要更多的字符才能键入)

    序列的行计数:
    len(s)
    s.size
    len(s.index)
    s.size
    len(s.index)
    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)
    # 5
    
    df.shape[0]
    # 5
    
    len(df.index)
    # 5
    
    df.shape[1]
    # 2
    
    len(df.columns)
    # 2
    
    len(s)
    # 5
    
    s.size
    # 5
    
    len(s.index)
    # 5
    
    df.count()
    
    A    5
    B    3
    dtype: int64
    
    s.count()
    # 3
    
    df.groupby('A').size()
    
    A
    a    2
    b    2
    c    1
    dtype: int64
    
    s.groupby(df.A).size()
    
    A
    a    2
    b    2
    c    1
    Name: B, dtype: int64
    
    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
    
    df.groupby('A')['B'].count()
    
    A
    a    2
    b    1
    c    0
    Name: B, dtype: int64
    
    *dataframe name*.tails(1)
    
     row = df.shape[0], col = df.shape[1]
    
    #import the data frame. Extention could be different as csv,xlsx or etc.
    data_fr = pd.read_csv('data.csv')
    
    #print the number of rows
    nu_rows = data_fr.shape[0]
    print(nu_rows)