Я располагаю следующим рукописным шрифтом.
import numpy as np
import pandas as pd
import math
data = np.array(
[[65, 36, 49, 84, 79, 56, 28, 43, 67, 36],
[43, 78, 37, 40, 68, 72, 55, 62, 22, 82],
[88, 50, 60, 56, 57, 46, 39, 57, 73, 65],
[59, 48, 76, 74, 70, 51, 40, 7, 56, 45],
[35, 62, 52, 63, 32, 80, 64, 53, 74, 34],
[76, 60, 48, 55, 51, 54, 45, 44, 35, 51],
[21, 35, 61, 45, 33, 61, 77, 60, 85, 68],
[45, 53, 34, 67, 42, 69, 52, 68, 52, 47],
[62, 65, 55, 71, 73, 50, 53, 59, 41, 54],
[41, 74, 82, 58, 26, 35, 47, 50, 38, 70]]
)
pd.set_option('precision', 2)
datos = data[:,:].flatten()
# Cálculo del número de intervalos
"""Si la parte entera de k es un número impar, redondeamos a la baja """
k = 1 + 3.322 * math.log10(len(datos))
numero = int(k)
if numero%2 == 0:
periodos = math.ceil(k)
else:
periodos = int(k)
inf = datos.min() # Limite inferior del primer intervalo
dif = datos.max()
"""Sumamos uno al máximo (46) porque en caso de no hacerlo, dado que el intervalo
es cerrado por su límite superior [..., 46), la observación 46 quedaría fuera del intervalo. """
sup = datos.max() + 1 # Limite superior del último intervalo
intervals = pd.interval_range(
start=inf,
end=sup,
periods=k,
name="Intervalo",
closed="left")
df = pd.DataFrame(index=intervals)
df["FreqAbs"] = pd.cut(datos, bins=df.index).value_counts()
# Media de cada intervalo del índice
df["Marca"] = df.index.mid
df["LimInf"] = df.index.left
df["LimSup"] = df.index.right
df
Ваше выполнение возвращает нас
Как я могу добиваться того, чтобы у чисел индекса было только два десятичные?. Я ввел в начале рукописного шрифта решение
pd.set_option('precision', 2)
но он, кажется, не служит для того, чтобы решить эту проблему.
Во-первых, ощущаться проблема, что колонна Intervalo
не обладает типом numГ©rico , если не, что обладает типом IntervalArray
ввиду того, что он содержит интервал из-за каждого элемента как Вашего индекса. Первый шаг, чтобы мочь использовать функции numГ©ricas DataFrame
, состоит в имении соответствующих колонн с Вашими dtype числовые . В этом случае deberГ-схвати отделять интервал в двух колоннах indepedientes от типа float32
, например, inicio_intervalo
и fin_intervalo
.
df[['inicio_intervalo','fin_intervalo']] = pd.DataFrame(df.Intervalo.values.tolist(), index= df.index)
Как только ты считал колонны правильно форматируемыми, а именно, содержа числа (ты не заносишь в список, как в твоем примере). Ограничивают десятичные посредством нее funciГіn dataframe.round
.
, Если ты хочешь округлить все числа DF, ты делаешь:
df = df.round(2) # 2 decimales
, если ты хочешь только колонны интервал.
df = df.round({"inicio_intervalo":2, "fin_intervalo":2))
ты Можешь видеть mГЎs полезных примеров здесь.