Pandasを使ってデータフレームの行数dfを取得しようとしていますが、これが私のコードです。
total_rows = df.count
print total_rows +1
total_rows = df['First_columnn_label'].count
print total_rows +1
両方のコードスニペットは私にこのエラーを与えます:
TypeError:+: 'instancemethod'および 'int'のサポートされていないオペランド型
何がおかしいのですか?
.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)
編集:コメントで@Dan Allenが述べたように、len(df.index)
とdf[0].count()
はcount
がNaN
sを除外しているので交換可能ではありません、
df
があなたのデータフレームであるとします。
count_row = df.shape[0] # gives number of row count
count_col = df.shape[1] # gives number of col count
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)
を直接呼び出すよりも少し遅くなりますが、これはほとんどのユースケースでは何の役割も果たしません。
len()
はあなたの友達です。行数の簡単な答えはlen(df)
です。
または、df.index
ですべての行にアクセスし、df.columns
ですべての列にアクセスできます。また、リストのカウントを取得するためにlen(anyList)
を使用するため、len(df.index)
を使用して行数の取得、および列カウントのlen(df.columns)
。
または、行数にアクセスする場合はdf.shape
のみを使用し、列数にはdf.shape[0]
のみを使用する場合は、df.shape[1]
を使用して行と列の数を一緒に返すことができます。 。
上記の答えとは別に、useはdf.axes
を使って行と列のインデックスを持つTupleを取得してからlen()
関数を使うことができます。
total_rows=len(df.axes[0])
total_cols=len(df.axes[1])
Pandas DataFrameの行数を取得する方法
これはあなたが何かを数えたいと思うすべての異なる状況をまとめた表で、推奨される方法と一緒になっています。
セットアップ
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
len(df)
、df.shape[0]
、またはlen(df.index)
len(df)
# 8
df.shape[0]
# 8
len(df.index)
# 8
特に違いが「真剣に、心配しないでください」のレベルにあるとき、定時操作のパフォーマンスを比較するのは愚かに見えます。しかし、これは他の答えとの傾向であるように思われるので、私は完全性のために同じことをしています。
上記の3つの方法のうち、len(df.index)
(他の回答で述べたように)が最速です。
注
- 上記のメソッドはすべて単純な属性検索であるため、一定時間操作です。
df.shape
(ndarray.shape
と同様)は、(# Rows, # Cols)
のタプルを返す属性です。たとえば、df.shape
は、この例では(8, 2)
を返します。
len(s)
、s.size
、len(s.index)
len(s)
# 8
s.size
# 8
len(s.index)
# 8
s.size
とlen(s.index)
はスピードの点ではほぼ同じです。しかし、私はlen(df)
をお勧めします。
注
size
は属性であり、要素数(=シリーズの行数)を返します。 DataFrameはdf.shape[0] * df.shape[1]
と同じ結果を返すsize属性も定義します。
df.shape[1]
、len(df.columns)
df.shape[1]
# 2
len(df.columns)
# 2
len(df.index)
と同様に、len(df.columns)
は2つの方法のうち速い方です(ただし、入力する文字数が多くなります)。
DataFrame.count
これは厄介なトピックです(すべての行を正確にカウントするのではなく、null以外の値だけをカウントするため)。
Seriesでは、Series.count()
を使用できます。
s.count()
# 5
DataFrame.count()
を呼び出すと、each列に非NaNカウントが返されます。
df.count()
A 8
B 5
dtype: int64
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
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
特定の列に対して呼び出されます。その理由は明白です。
行数(のいずれかを使用):
df.shape[0]
len(df)
私は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.
df.shape
は、データフレームの形状をTuple(行数、列数)の形式で返します。
あなたは単にnoにアクセスすることができます。行数またはいいえ。 colsのdf.shape[0]
またはdf.shape[1]
は、それぞれTupleの値にアクセスするのと同じです。
... 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]
より速い
連鎖操作の途中で行数を取得したい場合は、次のようにします。
df.pipe(len)
例:
row_count = (
pd.DataFrame(np.random.Rand(3,4))
.reset_index()
.pipe(len)
)
Len()関数の中に長い文を入れたくない場合に便利です。
代わりに__len __()を使用することもできますが、__len __()は少し変に見えます。
データフレームdfの場合、データの調査中に使用される、印刷されたカンマ形式の行数。
def nrow(df):
print("{:,}".format(df.shape[0]))
例:
nrow(my_df)
12,456,789