Панды транспонируют сбрасывает десятичное округление

Я тщательно определяю десятичные точки по столбцам в большой таблице результатов, но когда я переставляю их так, чтобы они могли поместиться на странице в моем отчете (используя .to_latex), панды устанавливают десятичные дроби, чтобы наибольшее число было.

Можно ли сохранить мою десятичную точность во время транспонирования? Я бы предпочел не определять десятичные дроби после транспонирования.

(ПРИМЕЧАНИЕ: я заметил, что это не происходит, когда в кадре данных перед транспонированием есть ряд строк, поэтому я думаю, что это какое-то определение типа данных, которое я не понимаю?)

Пример кода:

df = pd.DataFrame(np.random.random([3, 3]),
     columns=['A', 'B', 'C'], index=['first', 'second', 'third'])

df = df.round({'A': 1, 'C': 2})
print(df)
print(df.transpose())

Выход:

         A         B     C
first   0.3  0.557432  0.78
second  0.8  0.568175  0.28
third   0.4  0.745703  0.62
      first    second     third
A  0.300000  0.800000  0.400000
B  0.557432  0.568175  0.745703
C  0.780000  0.280000  0.620000

Я хочу:

      first    second     third
A  0.3       0.8       0.4
B  0.557432  0.568175  0.745703
C  0.78      0.28      0.62

1 ответ

Решение

При транспонировании существует вероятность того, что теперь транспонированные строки (в виде столбцов) могут быть не одного типа или одного и того же округления. Панда пытается исправить это (если возможно, с точки зрения производительности), и поэтому округление сбрасывается. Если вы хотите сохранить округление, преобразуйте кадр данных в object типа, а затем транспонировать -

df.astype(object).T

     first    second     third
A      0.8       0.7       0.7
B  0.22444  0.475358  0.498084
C     0.17      0.87      0.71 

Теперь pandas не делает никаких предположений о столбцах объектов, и они транспонируются как есть, без каких-либо попыток преобразования данных. Имейте в виду, что данные как объекты являются самоубийственными с точки зрения производительности, вы можете также использовать списки python на этом этапе, так как объекты не дают никаких преимуществ в производительности.

Другие вопросы по тегам