본문 바로가기
파이썬/궁금한것

해결) DataFrame에서 int64 자료형 숫자 천의단위마다 ,찍고 싶은데 어떡하는지

by 한국수달보호협회장 2022. 7. 2.

 

 

 

150,000 이런식으로 나오게 하고싶은데. 찾아봐도 잘 안나온다, 되게 간단한 질문이라 찾기도 쉬울줄 알았는데 아니다.

 

pd.set_option('display.float_format', '{:,.2f}'.format) float64는 그냥 소수점 둘째 짜리까지 찍는 명령어를 배웠는데 int64는 모르겠다

 

 

 

정답 : apply lambda를 이용하는 방법 

float형식은 display option으로 설정해줄수가 있었어서 그런 방법이 있을줄알았는데 진짜 구글에 한글도 쳐보고 영어로도 

'pandas int separator', 'pandas thousand comma' 별에별거 다쳐봤는데 안나와서 그냥 apply lambda방식을 사용하기로함.

그리고 이게 좋은게 내가 원하는 열만 설정할수있는거라 또 좋다. 데이터 열이 많아지면 열마다 형식을 다르게 설정하고 싶을때가 있기때문이다.

 

단점은.. separator 콤마를 찍는순간 object가 되어버린다.

정말 방법이없나? 판다스가 이렇게 후질리가 없는데 int64이면서 소숫점이 찍히게 안되냐고

 

# add thousand separator for integers and 2 decimal places for floats
df['count'] = df['count'].apply(lambda x: "{:,}".format(int(x)) if x == int(x) else "{:.2f}%".format(100*x))

 

int가 아닐때는 소수둘째자리 3.73% 이런식으로 나오게 하는거같다.

 

https://www.codegrepper.com/code-examples/python/pandas+add+thousands+separator 

 

pandas add thousands separator Code Example

# add thousand separator for integers and 2 decimal places for floats df['count'] = df['count'].apply(lambda x: "{:,}".format(int(x)) if x == int(x) else "{:.2f}%".format(100*x))

www.codegrepper.com

뭔가 else문을 쓰기싫을때는

 

df['column'] = df['column'].apply(lambda x: "{:,}".format(int(x))) 

 

이런식으로만 써도된다