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’에 대해 지원되지 않는 피연산자 유형
내가 무엇을 잘못하고 있지?
답변
당신은 .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 알렌은 코멘트에 언급 len(df.index)
과 df[0].count()
같은 교환 할 수 없습니다 count
제외 NaN
,의
답변
df
그런 다음 데이터 프레임이 있다고 가정 하십시오.
count_row = df.shape[0] # gives number of row count
count_col = df.shape[1] # gives number of col count
아니면 간결하게
r, c = df.shape
답변
사용하십시오 len(df)
. 이것은 팬더 0.11 또는 그 이전 버전에서 작동합니다.
__len__()
는 (0.12)로 문서화되어 Returns length of index
있습니다. 타이밍 정보는 루트의 답변과 같은 방식으로 설정하십시오.
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
하나의 추가 함수 호출로 인해 len(df.index)
직접 호출하는 것보다 약간 느리지 만 대부분의 사용 사례에서 아무런 역할을하지 않아야합니다.
답변
팬더 DataFrame의 행 수를 어떻게 얻습니까?
이 표에는 권장 방법과 함께 DataFrame (또는 Series)에서 무언가를 계산하려는 다양한 상황이 요약되어 있습니다.
각주
DataFrame.count
Series
널이 아닌 수는 열마다 다르기 때문에 각 열의 수를 a로 리턴합니다 .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
DataFrame의 행 개수 : 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)
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
는 속성이며 요소 수 (= Series의 행 수)를 반환합니다. DataFrames는와 동일한 결과를 반환하는 size 속성도 정의합니다df.shape[0] * df.shape[1]
.
널이 아닌 행 수 : 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
특정 열에서 호출됩니다.
답변
TL; DR
사용하다 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]
.
답변
위의 답변 외에도 use를 사용 df.axes
하여 행 및 열 인덱스가있는 튜플을 얻은 다음 len()
함수 를 사용할 수 있습니다.
total_rows=len(df.axes[0])
total_cols=len(df.axes[1])
답변
Jan-Philip Gehrcke의 답변을 바탕으로합니다.
len(df)
또는 len(df.index)
보다 빠른 이유 df.shape[0]
. 코드를보십시오. df.shape는 두 번 @property
호출하는 DataFrame 메서드를 실행하는 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)
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]