Как я ограничиваю число десятичных в индексах DataFrame?

Я располагаю следующим рукописным шрифтом.

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

Ваше выполнение возвращает нас introducir la descripción de la imagen aquí

Как я могу добиваться того, чтобы у чисел индекса было только два десятичные?. Я ввел в начале рукописного шрифта решение

pd.set_option('precision', 2)

но он, кажется, не служит для того, чтобы решить эту проблему.

1
задан 04.11.2019, 20:19
1 ответ

Во-первых, ощущаться проблема, что колонна 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 полезных примеров здесь.

1
ответ дан 01.12.2019, 12:48
  • 1
    Решения " df [" LimInf"] = df.index.left" и " df [" LimSup"] = df.index.right" уже верьте в две независимые колонны с lí mites интервала. С другой стороны, решение, которое ты предлагаешь с тем же объектом, " df [[' inicio_intervalo' ' fin_intervalo']] = pd. DataFrame (df. Intervalo.values.tolist (), index = df.index) " он возвращает мне ошибку " ' DataFrame' object существуешь не attribute ' Intervalo' " – efueyo 05.11.2019, 16:45
  • 2
    Тип " Intervalo" он: dtype =' interval [float64] '. ¿ Где podré изучать má s относительно этого типа данных?. – efueyo 05.11.2019, 17:01
  • 3
    Я попробовал resetando í ndice, менять тип данных о колонне, " df [' Intervalo'] = df [' Intervalo'] .astype (' float64') ". Он возвращает мне ошибку " Cannot cast IntervalArray to dtype float64" – efueyo 05.11.2019, 17:08
  • 4
    Случается, что ты занимаешь тип интервал или IntervalArray, чтобы индексировать dataframe, из-за которого precisió n он фундаментальный для Вашего especificació n, в отличие от нормальной колонны. Сейчас, если ты хочешь произвести proyecció n этой стоимости с несовершеннолетним precisió n deberá s извлекать точки начала и конца как независимые колонны, потом será n тип Float32. Дай ему возвращение и ты рассказываешь мне. Я приглашаю тебя прочитать documentació n DataFrame, хотя я думаю, что уже ты, должно быть, увидел ее. – Vichoko 05.11.2019, 22:15

Теги

Похожие вопросы