인프런 커뮤니티 질문&답변
DataFrame groupby 사용관련 질문
해결된 질문
작성
·
22
1
7:45 에서 해당 코드대로 아래와 같이 작성했는데 TypeError가 발생하였습니다.
grouped_by_city = df.groupby('City').mean()
print("\nGrouped by City:")
print(grouped_by_city)에러 원인을 찾아보니 groupby().mean()을 수행할 때 숫자가 아닌 컬럼이 함께 포함되었기 때문이라 아래와 같이 작성해야 된다고 합니다.
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'Age': [25,30,35,40,45],
'City' : ['New York','San Francisco', 'Los Angeles', 'Chicago', 'Houston'],
'Salary' : [50000, 60000, 70000, 80000, 90000]
}
df = pd.DataFrame(data)
df['Experience'] = [2,5,8,10,12]
print("\nDataFrame after adding coulmn:")
print(df)제가 data를 잘못 작성해서 이런 오류가 발생한 것일까요?
답변 2
0
안녕하세요 dlclxkzk87님,
결론부터 말하면 네, 코드가 틀렸다기보다는 groupby().mean()의 동작을 정확히 이해하지 못해서 생긴 오류예요. 아주 흔한 케이스고, 질문도 정확합니다. 문제는 문자열 컬럼(Name, City) 입니다.
mean()은 숫자형 컬럼에만 적용할 수 있는데, 예전 pandas 버전에서는 이걸 자동으로 무시했지만 최근 pandas 버전에서는 명시적으로 에러를 냅니다.
그래서 발생한 에러의 정체는 문자열 컬럼에 평균을 낼 수 없다 입니다
아마 grouped_by_city = df.groupby('City').mean(numeric_only=True) 하시면 괜찮을 겁니다.
0
안녕하세요, 인프런 AI 인턴입니다. dlclxkzk87님.
DataFrame의 groupby와 mean 메소드를 사용할 때 발생한 에러에 대해 고민하고 계시군요. groupby 메소드와 그 후 메소드 체이닝을 통해 데이터를 분석할 때, 범주형 데이터와 수치형 데이터의 구분은 매우 중요합니다.
문제 설명
groupby('City').mean() 수행 시 문제의 원인은 City 외에 그룹화 대상이나 평균을 계산할 수 없는(즉, 숫자가 아닌) 데이터를 포함하고 있는 경우입니다. 기본적으로 mean() 함수는 수치 연산에 적합한 컬럼에서만 작동되므로, 수치형 데이터가 아닌 경우 에러가 발생할 수 있습니다.
해결 방안
- 수치형 컬럼만 선택하여
groupby를 수행하면 문제를 해결할 수 있습니다. 예를 들어,Salary와Experience만을 평균 내고자 하는 경우:
grouped_by_city = df.groupby('City')[['Salary', 'Experience']].mean()
print("\nGrouped by City (Salary and Experience):")
print(grouped_by_city)
위 방법들을 통해 수치형 데이터를 정확히 그룹화하고 평균을 계산할 수 있습니다. 추가로, 코드를 작성하실 때 데이터 타입을 고려해 연산을 수행하면 오류를 줄일 수 있습니다.
관련된 기존 답변을 참고할 시 비슷한 문제 상황을 이해하고 해결할 수 있습니다. 다음 링크에서 자세한 정보를 제공합니다.
- DataFrame groupby 문제 해결 방법
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





감사합니다 😃