팬더 DataFrame의 행 수를 어떻게 얻습니까?


930

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'에 대해 지원되지 않는 피연산자 유형

내가 무엇을 잘못하고 있지?


12
알았어, 내가 속성을 확인하지 않는 메소드를 호출해야한다는 것을 알았으므로 df.count () no df.count
yemu

56
^ 위험한! 그주의 df.count()각 열에 대해 비 NA / NaN의 행의 수를 반환한다. df.shape[0]대신 행 수를 항상 정확하게 알려주는 대신 사용해야합니다 .
smci

3
df.count는 데이터 프레임이 비어있을 때 int를 반환하지 않습니다 (예 : pd.DataFrame (columns = [ "Blue", "Red"). count가 0이 아님)
Marcelo Bielsa

답변:


1248

당신은 .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,의


13
shapelen (df) 대신 대화식 작업 에 사용해야하는 한 가지 이유가 있습니다 . 다른 필터링을 시도해 보면 남은 항목 수를 알아야합니다. 모양을 사용하면 필터링 후 .shape를 추가하여 볼 수 있습니다. len ()을 사용하면 명령 행 편집이 훨씬 더 번거롭고 앞뒤로 진행됩니다.
K.-Michael Aye

9
OP에서는 작동하지 않지만 데이터 프레임이 비어 있는지 여부를 알아야하는 df.empty경우 최선의 선택입니다.
jtschoonhoven

19
나는 그것이 오래되었다는 것을 알고 있지만 len (df.index)은 381 나노 초 또는 0.381 마이크로 초가 걸리지 않습니다. df.shape는 3 배 느리고 1.17 마이크로 초가 걸립니다. 내가 뭘 놓 쳤니? @root
TG

11
(3,3) 행렬은 모양 튜플의 순서를 나타내지 않기 때문에 나쁜 예입니다
xaedes

4
어떻게 df.shape[0]보다 더 빨리 len(df)len(df.columns)? 사람 이 1ns (나노 세컨드) = 1,000 μS 이 381ns보다 약 3 배 더 느리다 수단 (마이크로 초), 따라서 = 1.17μs 1170ns,
itsjef

303

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

4
데이터 세트가 큰 경우 행 개수 만 필요한 경우 len (df.index)이 df.shape [0]보다 훨씬 빠릅니다. 나는 그것을 테스트했다.
Pokhrel

145

사용하십시오 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)직접 호출하는 것보다 약간 느리지 만 대부분의 사용 사례에서 아무런 역할을하지 않아야합니다.


81

팬더 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

특정 열에서 호출됩니다.


35

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].


19

위의 답변 외에도 use를 사용 df.axes하여 행 및 열 인덱스가있는 튜플을 얻은 다음 len()함수 를 사용할 수 있습니다.

total_rows=len(df.axes[0])
total_cols=len(df.axes[1])

2
원본의 사본 일 수도 있고 아닐 수도있는 색인 객체를 반환합니다. 길이를 확인한 후 버릴 경우 낭비입니다. 색인으로 다른 작업을 수행하지 않으려면 사용하지 마십시오 .
cs95

9

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]


7

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. 행과 열의 개수를 각각 반환합니다.
Catbuilts

4

체인 작업 중간에 행 개수를 얻으려면 다음을 사용할 수 있습니다.

df.pipe(len)

예:

row_count = (
      pd.DataFrame(np.random.rand(3,4))
      .reset_index()
      .pipe(len)
)

len()함수 안에 긴 문장을 넣고 싶지 않을 때 유용 합니다.

__len__()대신 사용할 수는 있지만 __len__()조금 이상하게 보입니다.


이 연산을 "파이프"하고 싶은 것은 무의미 해 보입니다. 파이프에 파이프 할 수있는 다른 것은 없기 때문에 (정수를 반환합니다). 나는 오히려 오히려 count = len(df.reset_index())count = df.reset_index().pipe(len)입니다. 전자는 함수 호출이없는 속성 조회입니다.
cs95

1

이봐도 사용할 수 있습니다 :

df데이터 프레임 이라고 가정 해 봅시다 . 그런 다음 df.shape데이터 프레임의 모양을 제공합니다.(row,col)

따라서 아래 명령을 할당하여 필요한

 row = df.shape[0], col = df.shape[1]

0

데이터 프레임 df의 경우 데이터를 탐색 할 때 인쇄 된 쉼표 형식의 행 수 :

def nrow(df):
    print("{:,}".format(df.shape[0]))

예:

nrow(my_df)
12,456,789

0

가장 읽기 쉬운 변형이라고 생각되는 데이터 프레임의 행 수를 찾는 다른 방법은 pandas.Index.size입니다.

내가 받아 들인 대답에 대해 언급 한 것처럼 :

pandas.Index.size실제로 는 컴퓨터 보다 더 빠를 것으로 예상 len(df.index)되지만 timeit내 컴퓨터에서는 그렇지 않다고 말합니다 (루프 당 ~ 150 ns 느림).


0

이것이 작동하는지 확실하지 않지만 (데이터는 생략 될 수 있음), 이것은 작동 할 수 있습니다 :

*dataframe name*.tails(1)

그리고 이것을 사용하여 코드 스 니펫을 실행하고 주어진 행 번호를 보면 행 수를 찾을 수 있습니다.


-2

이 중 하나는 dfDataFrame의 이름입니다.

방법 1 : len기능 사용 :

len(df)DataFrame에서이라는 행 수를 지정 df합니다.

방법 2 : count기능 사용 :

df[col].count()주어진 열의 행 수를 계산합니다 col.

df.count() 모든 열에 대한 행 수를 제공합니다.


3
이것은 훌륭한 답변이지만 이미이 질문에 대한 충분한 답변이 있으므로 실제로 아무것도 추가하지 않습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.