[python] 팬더 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’에 대해 지원되지 않는 피연산자 유형
내가 무엇을 잘못하고 있지?
답변
당신은 .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.countSeries널이 아닌 수는 열마다 다르기 때문에 각 열의 수를 a로 리턴합니다 .DataFrameGroupBy.sizeSeries같은 그룹의 모든 열이 같은 행 수를 공유하기 때문에를 반환합니다 .DataFrameGroupBy.countDataFramenull이 아닌 개수는 같은 그룹의 열마다 다를 수 있으므로를 반환합니다 . 특정 열에 대해 그룹 별 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]


