Pandas 转置重置小数舍入

nic*_*e33 4 python latex transpose pandas decimal-precision

我在大型结果表中按列仔细定义小数点,但是当我转置它以使其适合我的报告中的页面时(使用.to_latex),pandas 将小数点设置为最大数字。

转置期间是否可以保持小数精度?我宁愿不必在转置后定义小数。

(注意:我注意到,当转置之前的数据帧中有一行字符串时,它不会执行此操作,所以我认为这是某种我不理解的数据类型定义?)

示例代码:

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())
Run Code Online (Sandbox Code Playgroud)

输出:

         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
Run Code Online (Sandbox Code Playgroud)

我想:

      first    second     third
A  0.3       0.8       0.4
B  0.557432  0.568175  0.745703
C  0.78      0.28      0.62
Run Code Online (Sandbox Code Playgroud)

cs9*_*s95 5

转置时,现在转置的行(作为列)可能不是同一类型或同一舍入。Pandas 试图解决这个问题(如果可能的话,从性能的角度来看),因此舍入被重置。如果要保留舍入,请将数据帧转换为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 
Run Code Online (Sandbox Code Playgroud)

现在,pandas 不对对象列做出任何假设,并且它们按原样转置,而不尝试转换数据。请记住,数据作为对象在性能方面是自杀性的,此时您不妨使用 python 列表,因为对象不提供任何性能优势。