HOWTO · Pandas
Pandas DataFrame의 행 수를 얻는 방법
Pandas DataFrame의 행 수를 `shape`와 `len()`으로 구하고, 행과 열의 차이를 이해하며, 조건에 맞는 행의 개수를 세는 방법을 설명합니다.
이 페이지의 내용
Pandas DataFrame의 행 수를 구하려면 df.shape[0] 또는 len(df)를 사용합니다. shape 속성은 두 차원을 반환하며, 첫 번째 값은 행 수이고 두 번째 값은 열 수입니다. 조건에 맞는 행만 세려면 불리언 마스크를 합산하면 됩니다.
DataFrame.shape로 행 수와 열 수 구하기
DataFrame.shape는 (행, 열) 순서의 튜플을 반환하는 속성입니다. 행 수는 인덱스 0을, 열 수는 인덱스 1을 선택하면 됩니다. 두 차원을 모두 확인하거나 특정 열의 값을 세지 않고 행 수를 바로 구할 때 유용합니다.
다음 예제에서는 작은 DataFrame을 만들고 두 차원을 모두 출력합니다.
import pandas as pd
data = {
"Name": ["Alice", "Bob", "Charlie"],
"Age": [25, 30, 35],
"City": ["New York", "Los Angeles", "Chicago"],
}
df = pd.DataFrame(data)
print("Rows:", df.shape[0])
print("Columns:", df.shape[1])
행 수만 필요하다면 df.shape[0]을 사용합니다. 이 작업에 df.shape[1]을 사용하지 마세요. 열 수를 반환하므로, 행이 세 개이고 열도 세 개인 표에서는 두 값이 같아 보일 수 있습니다.
len() 또는 인덱스로 행 수 구하기
Python 내장 함수인 len()에 DataFrame을 전달하면 행 수를 반환합니다. 즉, len(df)를 사용하면 됩니다. 행 수만 필요할 때 간결한 방법입니다. len(df.index)도 DataFrame의 행 인덱스 길이를 구하므로 같은 값을 반환하며, len(df.axes[0])은 행 축의 길이를 구합니다. 열 수를 구할 때는 len(df.axes[1])을 사용할 수 있으며, 이는 df.shape[1]과 같습니다.
이 방법들은 인덱스 레이블과 관계없이 행을 세며, 특정 열에서 결측값이 아닌 값의 개수를 세지는 않습니다. 결측값이 없는 행을 세려면 먼저 df.dropna()로 데이터를 필터링한 다음 len(df.dropna())를 사용합니다. 기본 설정에서 dropna()는 어느 열이든 결측값이 있는 행을 제거합니다. 특정 열만 확인하려면 subset=["Age"]를 전달하세요.
DataFrame에서 .len()을 호출할 필요는 없습니다. len()은 Python 함수이므로 df.len()이나 .len(df.index)가 아니라 len(df)라고 씁니다. 필터링한 DataFrame처럼 세려는 대상과 같은 DataFrame을 개수 계산식에 사용하세요.
조건에 맞는 행 세기
열과 값을 비교해 불리언 마스크를 만든 다음, 그 마스크에 .sum()을 호출합니다. 불리언 Series에서는 각 True가 1로, 각 False가 0으로 계산되므로 합계가 조건에 맞는 행의 수가 됩니다. 이 벡터화 방식은 하나의 비교에 간단히 적용할 수 있고 여러 조건으로 확장할 수도 있습니다.
import pandas as pd
df = pd.DataFrame({"Name": ["Alice", "Bob", "Charlie"], "Age": [25, 30, 35]})
is_over_28 = df["Age"] > 28
matching_rows = is_over_28.sum()
print(matching_rows)
여러 조건을 비교할 때는 각 비교식을 괄호로 묶고 AND에는 &, OR에는 |를 사용합니다. 예를 들어 (df["Age"] > 28) & (df["Age"] < 35)는 두 범위를 모두 만족하는 나이의 행을 선택합니다. 결과 마스크를 합산하면 해당 행 수를 구할 수 있습니다. Pandas Series 전체를 비교할 때 Python의 and나 or를 사용하지 마세요.
고유한 행의 수를 세려면 중복을 제거한 뒤 계산합니다. len(df.drop_duplicates())는 모든 행을 세는 것과 다른 결과를 냅니다. drop_duplicates()를 적용하면 반복된 레코드는 한 번만 계산되기 때문입니다. 전체 행, 필터 조건에 맞는 행, 고유 레코드 중 무엇을 세려는지에 따라 적절한 식을 선택하세요.