パンダのDataFrameの行数を取得するにはどうすればよいですか?
この表は、DataFrame(またはSeries、完全を期す)で何かをカウントするさまざまな状況と推奨される方法をまとめたものです。
脚注
DataFrame.count
Series
null以外のカウントは列によって異なるため、各列のカウントをとして返します。
DataFrameGroupBy.size
Series
同じグループ内のすべての列が同じ行数を共有するため、が返されます。
DataFrameGroupBy.count
DataFrame
null以外のカウントは同じグループ内の列間で異なる可能性があるため、を返します。特定の列のグループごとの非nullカウントを取得するには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
一定の時間の操作のパフォーマンスを比較することは、特に違いが「真剣に、それについて心配しないでください」のレベルにある場合、ばかげているように見えます。しかし、これは他の回答の傾向のようですので、完全を期すために同じことをしています。
上記の3つの方法のうち、len(df.index)
(他の回答で述べたように)最速です。
注意
- 上記のメソッドはすべて、単純な属性ルックアップであるため、一定時間の操作です。
df.shape
(と同様ndarray.shape
)はのタプルを返す属性です(# Rows, # Cols)
。たとえば、ここの例にdf.shape
戻ります(8,
2)
。
データフレームの列数:df.shape[1]
、len(df.columns)
df.shape[1]
# 2
len(df.columns)
# 2
に類似してlen(df.index)
おりlen(df.columns)
、2つの方法のうちの方が高速です(ただし、入力する文字数が多くなります)。
シリーズの行数: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
は属性であり、要素の数(=シリーズの行数)を返します。データフレームは、と同じ結果を返すサイズ属性も定義しますdf.shape[0] * df.shape[1]
。
null以外の行数:DataFrame.count
およびSeries.count
ここで説明するメソッドは、null以外の値のみをカウントします(つまり、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
どちらの場合も、a Series
が返されます。DataFrames
すべてのグループが同じ行数を共有するため、これも意味があります。
グループごとの非null行数: 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オブジェクト全体に対して呼び出されます、v / s、
df.groupby('A')['B'].count()
A
a 2
b 1
c 0
Name: B, dtype: int64
特定の列で呼び出されます。