[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)에서 무언가를 계산하려는 다양한 상황이 요약되어 있습니다.

여기에 이미지 설명을 입력하십시오

각주

  1. DataFrame.countSeries널이 아닌 수는 열마다 다르기 때문에 각 열의 수를 a로 리턴합니다 .
  2. DataFrameGroupBy.sizeSeries같은 그룹의 모든 열이 같은 행 수를 공유하기 때문에를 반환합니다 .
  3. 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.sizelen(s.index)속도면에서 거의 동일하다. 그러나 나는 추천한다 len(df).

참고
size 는 속성이며 요소 수 (= Series의 행 수)를 반환합니다. DataFrames는와 동일한 결과를 반환하는 size 속성도 정의합니다 df.shape[0] * df.shape[1].

널이 아닌 행 수 : DataFrame.countSeries.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]