programing

판다 집계 결과에서 과학적 표기법 서식/억제

yoursource 2022. 12. 31. 20:34
반응형

판다 집계 결과에서 과학적 표기법 서식/억제

매우 많은 숫자에 대한 과학적 표기법을 만드는 판다의 집단 운영에서 산출물의 형식을 어떻게 수정할 수 있을까요?

python으로 스트링 포맷을 할 줄 알지만 여기에 적용하는 것은 곤란합니다.

df1.groupby('dept')['data1'].sum()

dept
value1       1.192433e+08
value2       1.293066e+08
value3       1.077142e+08

문자열로 변환하면 과학적 표기법이 생략되지만, 문자열 포맷과 소수점 추가 방법을 알고 있습니다.

sum_sales_dept.astype(str)

물론, 제가 댓글에 링크한 답변은 별로 도움이 되지 않습니다.이와 같이 독자적인 문자열 변환기를 지정할 수 있습니다.

In [25]: pd.set_option('display.float_format', lambda x: '%.3f' % x)

In [28]: Series(np.random.randn(3))*1000000000
Out[28]: 
0    -757322420.605
1   -1436160588.997
2   -1235116117.064
dtype: float64

그게 바람직한 방법인지는 모르겠지만 효과가 있어요.

순수하게 미적 목적을 위해 숫자를 문자열로 변환하는 것은 좋지 않은 생각처럼 보이지만, 좋은 이유가 있다면, 이것은 한 가지 방법입니다.

In [6]: Series(np.random.randn(3)).apply(lambda x: '%.3f' % x)
Out[6]: 
0     0.026
1    -0.482
2    -0.694
dtype: object

다음은 Dan Allan의 답변과 비슷하지만 람다 함수가 없는 다른 방법입니다.

>>> pd.options.display.float_format = '{:.2f}'.format
>>> Series(np.random.randn(3))
0    0.41
1    0.99
2    0.10

또는

>>> pd.set_option('display.float_format', '{:.2f}'.format)

라운드 함수를 사용하여 특정 데이터 프레임에 대한 과학적 표기법을 억제할 수 있습니다.

df1.round(4)

또는 다음을 통해 글로벌하게 억제할 수 있습니다.

pd.options.display.float_format = '{:.4f}'.format

주피터 노트북 셀의 데이터 프레임 출력을 스타일링하려면 데이터 프레임 단위로 표시 스타일을 설정할 수 있습니다.

df = pd.DataFrame({'A': np.random.randn(4)*1e7})
df.style.format("{:.1f}")

여기에 이미지 설명 입력

메뉴얼을 참조해 주세요.

소수점 이하 고정 자리수를 글로벌하게 설정하는 것은 많은 경우 좋지 않습니다.이는 크기에 관계없이 표시하는 모든 다양한 데이터에 대해 소수점 이하 자리수가 적절하지 않을 수 있기 때문입니다.대신 큰 값과 매우 작은 값에 대해서만 과학적인 표기법을 제공합니다(그리고 ","를 생략하지 않는 한 수천 개의 구분자를 추가합니다).

pd.set_option('display.float_format', lambda x: '%,g' % x)

또는 정확성을 잃지 않고 과학적 표기법을 거의 완전히 억제하려면 다음과 같이 하십시오.

pd.set_option('display.float_format', str)

부동소수점이 다른 여러 데이터 프레임이 있었기 때문에 x-to-Allans 아이디어로 동적 길이를 만들었습니다.

pd.set_option('display.float_format', lambda x: f'%.{len(str(x%1))-2}f' % x)

이것의 단점은 플로트에서 마지막 0이 있으면 잘라진다는 것입니다.따라서 0.000070이 아니라 0.00007이 됩니다.

이 유용한 코멘트를 확대해, 다음의 솔루션에서는, 포맷 옵션을 설정해, 옵션을 영속적으로 변경하지 않고 결과를 표시합니다.

with pd.option_context('display.float_format', lambda x: f'{x:,.3f}'):
    display(sum_sales_dept)

dept
value1  119,243,300.0
value2  129,306,600.0
value3  107,714,200.0

예를 들어 csvfile csv.writer의 일부로 값을 사용하는 경우 목록을 작성하기 전에 번호 형식을 지정할 수 있습니다.

df['label'].apply(lambda x: '%.17f' % x).values.tolist()

언급URL : https://stackoverflow.com/questions/21137150/format-suppress-scientific-notation-from-pandas-aggregation-results

반응형