web-dev-qa-db-ja.com

パンダDataFrameの行数を取得する方法

Pandasを使ってデータフレームの行数dfを取得しようとしていますが、これが私のコードです。

方法1:

total_rows = df.count
print total_rows +1

方法2:

total_rows = df['First_columnn_label'].count
print total_rows +1

両方のコードスニペットは私にこのエラーを与えます:

TypeError:+: 'instancemethod'および 'int'のサポートされていないオペランド型

何がおかしいのですか?

634
yemu

.shapeプロパティまたは単にlen(DataFrame.index)を使用できます。ただし、パフォーマンスに大きな違いがあります(len(DataFrame.index)が最も速い)。

In [1]: import numpy as np

In [2]: import pandas as pd

In [3]: df = pd.DataFrame(np.arange(12).reshape(4,3))

In [4]: df
Out[4]: 
   0  1  2
0  0  1  2
1  3  4  5
2  6  7  8
3  9  10 11

In [5]: df.shape
Out[5]: (4, 3)

In [6]: timeit df.shape
2.77 µs ± 644 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

In [7]: timeit df[0].count()
348 µs ± 1.31 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [8]: len(df.index)
Out[8]: 4

In [9]: timeit len(df.index)
990 ns ± 4.97 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

enter image description here

編集:コメントで@Dan Allenが述べたように、len(df.index)df[0].count()countNaNsを除外しているので交換可能ではありません、

851
root

dfがあなたのデータフレームであるとします。

count_row = df.shape[0]  # gives number of row count
count_col = df.shape[1]  # gives number of col count
193
Nasir Shah

len(df)を使用してください。これはパンダ0.11またはそれ以前のバージョンで動作します。

__len__()は現在(0.12)Returns length of indexで文書化されています。タイミング情報。rootの答えと同じ方法で設定します。

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

関数呼び出しが1つ追加されているため、len(df.index)を直接呼び出すよりも少し遅くなりますが、これはほとんどのユースケースでは何の役割も果たしません。

110

len()はあなたの友達です。行数の簡単な答えはlen(df)です。

または、df.indexですべての行にアクセスし、df.columnsですべての列にアクセスできます。また、リストのカウントを取得するためにlen(anyList)を使用するため、len(df.index)を使用して行数の取得、および列カウントのlen(df.columns)

または、行数にアクセスする場合はdf.shapeのみを使用し、列数にはdf.shape[0]のみを使用する場合は、df.shape[1]を使用して行と列の数を一緒に返すことができます。 。

22
Memin

上記の答えとは別に、useはdf.axesを使って行と列のインデックスを持つTupleを取得してからlen()関数を使うことができます。

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

Pandas DataFrameの行数を取得する方法

これはあなたが何かを数えたいと思うすべての異なる状況をまとめた表で、推奨される方法と一緒になっています。

enter image description here


セットアップ

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

df

   A    B
0  a    x
1  a    x
2  a  NaN
3  b  NaN
4  b    x
5  c    x
6  c    x
7  d  NaN

s

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

DataFrameの行数をカウントする:len(df)df.shape[0]、またはlen(df.index)

len(df)
# 8

df.shape[0]
# 8

len(df.index)
# 8

特に違いが「真剣に、心配しないでください」のレベルにあるとき、定時操作のパフォーマンスを比較するのは愚かに見えます。しかし、これは他の答えとの傾向であるように思われるので、私は完全性のために同じことをしています。

上記の3つの方法のうち、len(df.index)(他の回答で述べたように)が最速です。

  • 上記のメソッドはすべて単純な属性検索であるため、一定時間操作です。
  • df.shapendarray.shapeと同様)は、(# Rows, # Cols)のタプルを返す属性です。たとえば、df.shapeは、この例では(8, 2)を返します。

シリーズの行数を数える:len(s)s.sizelen(s.index)

len(s)
# 8

s.size
# 8

len(s.index)
# 8

s.sizelen(s.index)はスピードの点ではほぼ同じです。しかし、私はlen(df)をお勧めします。


sizeは属性であり、要素数(=シリーズの行数)を返します。 DataFrameはdf.shape[0] * df.shape[1]と同じ結果を返すsize属性も定義します。


DataFrameの列数をカウントする:df.shape[1]len(df.columns)

df.shape[1]
# 2

len(df.columns)
# 2

len(df.index)と同様に、len(df.columns)は2つの方法のうち速い方です(ただし、入力する文字数が多くなります)。


非NaN行をカウントする:DataFrame.count

これは厄介なトピックです(すべての行を正確にカウントするのではなく、null以外の値だけをカウントするため)。

Seriesでは、Series.count()を使用できます。

s.count()
# 5

DataFrame.count()を呼び出すと、each列に非NaNカウントが返されます。

df.count()

A    8
B    5
dtype: int64

グループごとのすべての行数を数える(Series/DataFrame):GroupBy.size

SeriesにはSeriesGroupBy.size()を使用してください。

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

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

DataFramesにはDataFrameGroupBy.size()を使用してください。

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

A
a    3
b    2
c    2
d    1
dtype: int64

グループごとに非NaN行のみを数える(Series/DataFrame):GroupBy.count

上記と似ていますが、count()ではなくsize()を使用してください。 size()は常にSeriesを返しますが、count()はその呼び出し方法に応じてSeriesまたはDataFrameを返します。

次の2つのステートメントは同じことを返します。

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

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

一方、countについては、

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

   B
A   
a  2
b  1
c  2
d  0

... GroupByオブジェクト全体、v/sに対して呼び出されます。

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

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

特定の列に対して呼び出されます。その理由は明白です。

10
cs95

行数(のいずれかを使用):

df.shape[0]
len(df)
6
Prakhar Agarwal

私はR背景からパンダに来ます、そしてそれが行または列を選ぶことに関してはパンダがより複雑であることを私は見ます。私はしばらくの間それと格闘しなければならなかった、そして私はそれに対処するいくつかの方法を見つけた:

列数を取得する:

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

行数を取得する:

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

df.shapeは、データフレームの形状をTuple(行数、列数)の形式で返します。

あなたは単にnoにアクセスすることができます。行数またはいいえ。 colsのdf.shape[0]またはdf.shape[1]は、それぞれTupleの値にアクセスするのと同じです。

5
Rohit Malhotra

... Jan-Philip Gehrckeの答えを基にしています。

len(df)またはlen(df.index)df.shape[0]より速い理由です。コードを見てください。 df.shapeは、lenを2回呼び出すDataFrameメソッドを実行する@propertyです。

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)は関数呼び出しが1つ少ないのでlen(df)より少し速くなりますが、これは常にdf.shape[0]より速い

5
debo

連鎖操作の途中で行数を取得したい場合は、次のようにします。

df.pipe(len)

例:

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

Len()関数の中に長い文を入れたくない場合に便利です。

代わりに__len __()を使用することもできますが、__len __()は少し変に見えます。

2
Allen

データフレームdfの場合、データの調査中に使用される、印刷されたカンマ形式の行数。

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

例:

nrow(my_df)
12,456,789
0
Vlad