Boa tarde
Fiz todos os passos, mas na saída final foi gerado dois valores nan.
import numpy as np
dados.shape[0]
k = 1 + (10 / 3) * np.log10(dados.shape[0]) # n é o número de linhas do dataframe
k = int(k.round(0)) # arredondado e retirando o zero após a virgula
frequencia = pd.value_counts(pd.cut(x=dados['Renda'], bins=k, include_lowest=True), sort=False)
percentual = pd.value_counts(pd.cut(x=dados['Renda'], bins=k, include_lowest=False), sort=False, normalize=True) * 100
distribuicao_frequencia_amplitude_fixa = pd.DataFrame({'Frequência': frequencia, 'Percentual %': percentual})
distribuicao_frequencia_amplitude_fixa
Frequência Percentual %
(-200.001, 11764.706] 75594.0 NaN
(-200.0, 11764.706] NaN 98.378449
(11764.706, 23529.412] 1022.0 1.330036
(23529.412, 35294.118] 169.0 0.219938
(35294.118, 47058.824] 19.0 0.024727
(47058.824, 58823.529] 16.0 0.020822
(58823.529, 70588.235] 5.0 0.006507
(70588.235, 82352.941] 4.0 0.005206
(82352.941, 94117.647] 1.0 0.001301
(94117.647, 105882.353] 6.0 0.007808
(105882.353, 117647.059] 0.0 0.000000
(117647.059, 129411.765] 1.0 0.001301
(129411.765, 141176.471] 0.0 0.000000
(141176.471, 152941.176] 0.0 0.000000
(152941.176, 164705.882] 0.0 0.000000
(164705.882, 176470.588] 0.0 0.000000
(176470.588, 188235.294] 0.0 0.000000
(188235.294, 200000.0] 3.0 0.003904