programing

특정 부동 데이터 프레임 열을 팬더에서 백분율 형식으로 지정

stoneblock 2023. 10. 11. 20:27

특정 부동 데이터 프레임 열을 팬더에서 백분율 형식으로 지정

IPython 노트북에 논문을 작성하려고 하는데 디스플레이 형식에 문제가 생겼습니다.다음과 같은 데이터 프레임이 있다고 가정합니다.df요, 요?var1그리고.var2두 과 두 var3

       var1        var2         var3    
id                                              
0    1.458315    1.500092   -0.005709   
1    1.576704    1.608445   -0.005122    
2    1.629253    1.652577   -0.004754    
3    1.669331    1.685456   -0.003525   
4    1.705139    1.712096   -0.003134   
5    1.740447    1.741961   -0.001223   
6    1.775980    1.770801   -0.001723    
7    1.812037    1.799327   -0.002013    
8    1.853130    1.822982   -0.001396    
9    1.943985    1.868401    0.005732

내부의 숫자는 100을 곱하지 않습니다(예: -0.0057=-0.57%).

승인된 답변은 프레젠테이션 목적으로 원시 데이터를 수정할 것을 제안합니다. 일반적으로 원하지 않는 것입니다.이러한 열을 사용하여 추가 분석을 수행해야 하며 반올림으로 인해 손실된 정밀도가 필요하다고 생각해 보십시오.

다음과 같은 경우 데이터 프레임의 개별 열 형식을 수정할 수 있습니다.

output = df.to_string(formatters={
    'var1': '{:,.2f}'.format,
    'var2': '{:,.2f}'.format,
    'var3': '{:,.2%}'.format
})
print(output)

'{:,.2%}'.format(0.214)이 껑충 껑충 껑충 껑충 껑충 뛰다21.40%. 100 .

당신은 더 이상 멋진 HTML 테이블을 가지고 있지 않고 텍스트 표현만 가지고 있습니다.합니다.to_html대신 기능합니다.

from IPython.core.display import display, HTML
output = df.to_html(formatters={
    'var1': '{:,.2f}'.format,
    'var2': '{:,.2f}'.format,
    'var3': '{:,.2%}'.format
})
display(HTML(output))

갱신하다

판다 0.17.1이 되면서 삶이 편해졌고 우리는 아름다운 html 테이블을 바로 얻을 수 있습니다.

df.style.format({
    'var1': '{:,.2f}'.format,
    'var2': '{:,.2f}'.format,
    'var3': '{:,.2%}'.format,
})

float의 기본 형식을 설정할 수도 있습니다.

pd.options.display.float_format = '{:.2%}'.format

{:} 대신 '{:.2%}'을(를) 사용합니다.2f}%' - 전자는 0.41~41.00%(정확히는 0.41%), 후자는 0.41%(잘못은 0.41%)로 변환합니다.

라운드 함수를 사용하여 값을 바꾸고 백분율 숫자의 문자열 표현 형식을 지정합니다.

df['var2'] = pd.Series([round(val, 2) for val in df['var2']], index = df.index)
df['var3'] = pd.Series(["{0:.2f}%".format(val * 100) for val in df['var3']], index = df.index)

라운드 함수는 부동 소수점 숫자를 함수의 두 번째 인수로 제공된 소수점 자리 수로 반올림합니다.

문자열 서식을 사용하면 원하는 대로 숫자를 나타낼 수 있습니다.다 하여 소수점 할 수 .f.

p.s. 나는 당신의 '백분율' 숫자에 이미 100을 곱했는지 확신할 수 없었습니다.그러면 표시되는 소수점 수를 변경하고 100배의 곱을 제거할 수 있습니다.

종종 우리는 전체 유효숫자를 계산하는 데 관심을 갖지만 시각적인 미학의 경우 데이터 프레임을 표시할 때 소수점만 보고 싶을 수도 있습니다.

을 -는 html 이라는 할 수 .style.

일부 열에서 두 자리의 유효 숫자만 보는 경우 다음 코드 스니펫을 사용할 수 있습니다.

주어진데이터프레임

import numpy as np
import pandas as pd

df = pd.DataFrame({'var1': [1.458315, 1.576704, 1.629253, 1.6693310000000001, 1.705139, 1.740447, 1.77598, 1.812037, 1.85313, 1.9439849999999999],
          'var2': [1.500092, 1.6084450000000001, 1.652577, 1.685456, 1.7120959999999998, 1.741961, 1.7708009999999998, 1.7993270000000001, 1.8229819999999999, 1.8684009999999998],
          'var3': [-0.0057090000000000005, -0.005122, -0.0047539999999999995, -0.003525, -0.003134, -0.0012230000000000001, -0.0017230000000000001, -0.002013, -0.001396, 0.005732]})

print(df)
       var1      var2      var3
0  1.458315  1.500092 -0.005709
1  1.576704  1.608445 -0.005122
2  1.629253  1.652577 -0.004754
3  1.669331  1.685456 -0.003525
4  1.705139  1.712096 -0.003134
5  1.740447  1.741961 -0.001223
6  1.775980  1.770801 -0.001723
7  1.812037  1.799327 -0.002013
8  1.853130  1.822982 -0.001396
9  1.943985  1.868401  0.005732

필수 형식을 가져오는 스타일

    df.style.format({'var1': "{:.2f}",'var2': "{:.2f}",'var3': "{:.2%}"})

제공:

     var1   var2    var3
id          
0   1.46    1.50    -0.57%
1   1.58    1.61    -0.51%
2   1.63    1.65    -0.48%
3   1.67    1.69    -0.35%
4   1.71    1.71    -0.31%
5   1.74    1.74    -0.12%
6   1.78    1.77    -0.17%
7   1.81    1.80    -0.20%
8   1.85    1.82    -0.14%
9   1.94    1.87    0.57%

갱신하다

display 명령을 찾을 수 없는 경우 다음을 시도합니다.

from IPython.display import display

df_style = df.style.format({'var1': "{:.2f}",'var2': "{:.2f}",'var3': "{:.2%}"})

display(df_style)

요구 사항들

  • 사용방법display명령어, 컴퓨터에 Ipython이 설치되어 있어야 합니다.
  • display명령이 없는 온라인 파이썬 인터프리터에서 작동하지 않습니다.IPytonhttps://repl.it/languages/python3 과 같은 설치된
  • 디스플레이 명령은 주피터-노트북, 주피터-랩, 구글-컬랩, 카글-커넬, IBM-왓슨, 모드-애널리틱스 및 기타 많은 플랫폼에서 즉시 작동하며, IPython에서 디스플레이를 가져올 필요도 없습니다.

@linqu에서 제안한 것처럼 프레젠테이션을 위해 데이터를 변경해서는 안 됩니다.판다 0.17.1 이후, (조건부) 서식이 더 쉬워졌습니다.설명서 인용:

조건부 포매팅을 적용할 수 있으며, 시각적 스타일링은DataFrame내부의 데이터에 따라, 를 사용함으로써.DataFrame.style소유물.이것은 a를 반환하는 속성입니다.pandas.Styler형식을 지정하고 표시하는 데 유용한 메소드를 가진 object.DataFrames.

예를 들어, 다음과 같습니다(일반적인 테이블은 목성에 표시됨).

df.style.format({
    'var1': '{:,.2f}'.format,
    'var2': '{:,.2f}'.format,
    'var3': '{:,.2%}'.format,
})

또 다른 방법으로 더 많은 열에 걸쳐 수행해야 합니다.

applymap 사용

df[['var1','var2']] = df[['var1','var2']].applymap("{0:.2f}".format)
df['var3'] = df['var3'].applymap(lambda x: "{0:.2f}%".format(x*100))

applymap은 함수를 여러 열에 적용해야 할 경우 유용합니다. 이 예에 대해 기본적으로 아래의 약어입니다.

df[['var1','var2']].apply(lambda x: map(lambda x:'{:.2f}%'.format(x),x),axis=1)

아래의 적용에 대한 자세한 설명, 지도 적용 지도:

Panda에서 맵, applymap 및 apply method 간의 차이

조금 더 읽기 쉽고, 우아하고, 일반적인(YMMV) 것으로 간주될 수 있는 수용된 답변에 대한 유사한 접근 방식으로, 당신은 다음을 활용할 수 있습니다.map방법:

# OP example
df['var3'].map(lambda n: '{:,.2%}'.format(n))

# also works on a series
series_example.map(lambda n: '{:,.2%}'.format(n))

성능 측면에서는 OP 솔루션보다 상당히 가깝습니다(약간 느림).

별론으로, 만약 당신이 선택한다면.pd.options.display.float_formatroute, context manager를 사용하여 이 병렬 numpy 예제에 따라 상태를 처리하는 것을 고려합니다.

style.format벡터화되어 있기 때문에 단순히 전체에 적용할 수 있습니다.df(또는 그 숫자열만):

df[num_cols].style.format('{:,.3f}')

목록 이해력은 확실한 결과를 가지고 있습니다. 성공적으로 사용하고 있습니다. python 목록 이해력은 다음과 같이 사용할 수 있다고 생각합니다.

df['var1'] = ["{:.2f}".format(i) for i in df['var1'] ]
df['var2'] = ["{:.2f}".format(i) for i in df['var2'] ]
df['var3'] = ["{:.2%}".format(i) for i in df['var3'] ]

감사해요.

이 답변에 따라 저는 주어진 시리즈에서 apply 기능을 사용했습니다.제 경우에는 시리즈의 value_counts를 백분율 형식으로 표시하는 데 관심이 있었습니다.

제가 했습니다.

df['my_col'].value_counts(normalize=True).apply(lambda x: "{0:.2f}%".format(x*100))
# Incident             88.16%
# StreetWorks          3.29% 
# Accident             2.36%
# ... 

단순한 것 대신에

df['my_col'].value_counts(normalize=True)
# Incident             0.881634
# StreetWorks          0.032856
# Accident             0.023589
# ...

언급URL : https://stackoverflow.com/questions/23981601/format-certain-floating-dataframe-columns-into-percentage-in-pandas