python pandas列分区号作为科学通知

时间:2017-06-26 12:19:56

标签: python pandas

我有一个非常大的脚本,大到这里发布,所以我希望有人可以帮助我而不发布整个脚本... 在我的脚本中,我有多个带有数字的列(列'AAAAA':'TTTTT'),我将这些数字除以一列中的数字('kmer_number')。输出将写入新列。 这是通过此命令

完成的
df5d[['Column{}'.format(i) for i in range(2003, 2003+(2002-979)+1)]] = df5d.loc[:, 'AAAAA':'TTTTT'].div(df5d['kmer_number'], axis=0)

新列中的输出是带>的数字。 8位小数,我想将它们转换为科学通知

我的输出就像这样

Column2972  Column2973  Column2974
0.000755306 0.00025591  0.000305601
0.000783782 0.000265844 0.000433143
0           0           0
0.000817596 0.000281049 0.000309438
0.000819018 0.000262932 0.000386843

我尝试了以下命令

df5d[2003:3026] = df5d[2003:3026].map('{:.2e}'.format)

但这给出了错误

"Traceback (most recent call last):
  File "pythonscript_v10.py", line 226, in <module>
    df5d[2003:3026] = df5d[2003:3026].map('{:.2e}'.format)
  File "/usr/lib/python3/dist-packages/pandas/core/generic.py", line 2360, in __getattr__
    (type(self).__name__, name))
AttributeError: 'DataFrame' object has no attribute 'map'

1 个答案:

答案 0 :(得分:1)

使用pd.set_option

>>d = pd.DataFrame(np.random.random((5,3)))

>>d

          0         1         2
0  0.725952  0.048684  0.735873
1  0.188897  0.043040  0.250257
2  0.623823  0.887885  0.269239
3  0.764847  0.069001  0.155357
4  0.515004  0.858192  0.726932

>>pd.set_option('display.float_format', '{:.2E}'.format)

>>d

         0        1        2
0 7.26E-01 4.87E-02 7.36E-01
1 1.89E-01 4.30E-02 2.50E-01
2 6.24E-01 8.88E-01 2.69E-01
3 7.65E-01 6.90E-02 1.55E-01
4 5.15E-01 8.58E-01 7.27E-01

参考:ThisThis

修改

正如评论中所指出的,如果你只想在科学记数法中有一个特定的列(比如专栏0):

>>d = pd.DataFrame(np.random.random((5,3)))

          0         1         2
0  0.113197  0.352638  0.023745
1  0.261915  0.742125  0.196289
2  0.413795  0.665053  0.927284
3  0.380613  0.660596  0.141781
4  0.826938  0.672995  0.464685


>>d[0] = d[0].map('{:,.2E}'.format)

>>d
    0         1         2
0  1.13E-01  0.352638  0.023745
1  2.62E-01  0.742125  0.196289
2  4.14E-01  0.665053  0.927284
3  3.81E-01  0.660596  0.141781
4  8.27E-01  0.672995  0.464685

编辑2:

对于数据框(以及数据框的一部分),请使用applymap

>>d = pd.DataFrame(np.random.random((5,3)))

>>d
          0         1         2
0  0.526628  0.061561  0.536804
1  0.784187  0.372477  0.444849
2  0.438519  0.515741  0.858563
3  0.015711  0.728206  0.484090
4  0.855883  0.611769  0.460805


>>d = d.applymap('{:,.2E}'.format)

>>d
          0         1         2
0  5.27E-01  6.16E-02  5.37E-01
1  7.84E-01  3.72E-01  4.45E-01
2  4.39E-01  5.16E-01  8.59E-01
3  1.57E-02  7.28E-01  4.84E-01
4  8.56E-01  6.12E-01  4.61E-01