Панды транспонируют сбрасывает десятичное округление
Я тщательно определяю десятичные точки по столбцам в большой таблице результатов, но когда я переставляю их так, чтобы они могли поместиться на странице в моем отчете (используя .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 на этом этапе, так как объекты не дают никаких преимуществ в производительности.