【问题标题】:Need help on formatting of output in pycharm - python需要有关 pycharm 中输出格式的帮助 - python
【发布时间】:2019-01-20 09:59:42
【问题描述】:

我正在使用 JetBrains Pycharm (Windows OS) 进行 python 编码。在我的代码中,我使用 pd.read_csv(dataset) 读取了一个 csv 文件。然后对一些表格列做一些审核,最后想看到更新的表格,所以最后给出命令 --> print (dataset)。

现在当修改后的数据集打印在底部窗口时,数据集的所有元素都以浮点指数格式打印。

例如, [ 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.65349200e+05 1.36897800e+05 4.71784100e+05]

这是我需要帮助的地方。我需要以浮点十进制格式或简单十进制格式打印数据集。

如何以最简单的方式实现? 此外,Pycharm 中是否有任何选项可以从任何设置/配置窗口配置输出格式(指数、十进制等),而不是硬编码?

【问题讨论】:

标签: python formatting pycharm output


【解决方案1】:

使用 {n}。格式()

例如:'{:n}'.format(1234))

ds_x=[ 0.00000000e+00, 0.00000000e+00, 1.00000000e+00,1.65349200e+05, 1.36897800e+05, 4.71784100e+05]
# For Numpy arrays use '.astype'
# Copy of the array 'ds_x', cast to a specified type 'float'.
# Note: Try type 'float32' OR 'float64' if the below fails to provide correct precision.
data_set = ds_x.astype(float)
for i in data_set:
    print("{:.16f}".format(float(i)))

# 更多关于更好的精度可以找到here

输出:

0.0000000000000000

0.0000000000000000

1.0000000000000000

165349.2000000000116415

136897.7999999999883585

471784.0999999999767169

或者您可以使用其他方式:

"%.16f" % (float( 00,1.65349200e+05))

关于 PyCharm 的第二个问题。您可能想查看 formatting markersreformatting 的完整详细信息。


更新:

这是您提供的数据集的更新代码示例。

import numpy as np

ds = np.array([[ 0.00000000e+00, 1.00000000e+00, 0.00000000e+00, 2.86637600e+04, 1.27056210e+05, 2.01126820e+05],
                [ 0.00000000e+00, 0.00000000e+00, 1.00000000e+00, 1.44372410e+05, 1.18671850e+05, 3.83199620e+05]])

for data_x in iter(ds):
    print()
    for data_y in data_x:
        print("%.16f" % float(data_y))

输出:

0.0000000000000000
1.0000000000000000
0.0000000000000000
28663.7599999999983993
127056.2100000000064028
201126.8200000000069849

0.0000000000000000
0.0000000000000000
1.0000000000000000
144372.4100000000034925
118671.8500000000058208
383199.6199999999953434

关于错误:

TypeError:只有 size-1 的数组可以转换为 Python 标量

这是因为您使用的数据集是 Python 矩阵或一个列表/两个数组的列表。这篇文章中的第一个代码示例是使用一个与一个数组一起工作的循环;但是,由于您在第一个循环中使用包含两个数组的较大数据集,因此它将传递整个数组,从而导致输出上述错误。为了纠正这个问题,我简单地添加了第二个循环来遍历每个数组的每个值。

【讨论】:

  • 谢谢。就我而言,我想将它应用于具有多行和多列的大数据集(ds)。所以我输入的是 - for i in ds_x: print(print("{:.16f}".format(float(i)))) 我得到了错误 - 第 20 行,在 print("%.2f " % (float(i))) TypeError: 只有长度为 1 的数组可以转换为 Python 标量
  • 这似乎与 numpy 相关 stackoverflow.com/a/36680545/7548672 - 在我上面的示例中尝试在 for 循环之前执行 data_set = ds_x.astype(float)。
  • 谢谢。我又倒霉了。它仍然抛出相同的错误 - TypeError: only length-1 数组可以转换为 Python 标量。如果我打印我的数据集 (ds),它会显示以下内容,这会让您更好地了解我的数据集到底是什么 - print (ds) [[ 0.00000000e+00 1.00000000e+00 0.00000000e+00 2.86637600e+04 1.27056210e+05 2.01126820e+05] [ 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.44372410e+05 1.18671850e+05 3.83199620e+05]]
  • 我使用您的数据集向我的帖子添加了更新。如果它仍然不是您想要的,您能否更新您的原始帖子,提供您的代码不起作用。我将尝试编辑我看到的可能是问题的内容。谢谢。
猜你喜欢
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多