问题描述
我从一个来源收到不同的系列。其中一些系列的价值很大(X 十亿)。然后我将所有系列组合到一个数据框中,每个系列都有单独的列。
现在,当我打印数据框时,系列中的大数字以科学计数法显示。即使单独打印该系列也会以科学记数法显示数字。
Dataframe df(多索引)输出为:
Values
Item Sub
A 1 1.396567e+12
B 1 2.868929e+12
我已经试过了:
pd.set_option('display.float_format',lambda x: '%,.2f' % x)
这不起作用:
- 它可以在任何地方进行转换。我只需要在该特定数据框中进行转换。
- 它尝试转换各种浮点数,而不仅仅是科学中的浮点数。因此,即使浮点数为 89.142,它也会尝试转换格式,并且由于没有数字可以放置 ',',它会显示错误。
然后我尝试了这些:
df.round(2)
这仅将数字浮点数从现有的 3 位小数转换为 2 位小数。没有对科学价值做任何事情。
然后我尝试了:
df.astypes(floats)
不做任何可见的事情。输出保持不变。
我们还能如何将科学记数法更改为数据帧内的普通浮点数。我不想用转换后的值创建一个新列表。数据框本身应以正常方式显示值。
你们能帮我找到解决办法吗?
谢谢。
解决方法
试试 df['column'] = df['column'].astype(str)
。如果不起作用,您应该在从您的数据创建熊猫数据框之前将数字类型更改为字符串
我建议将所有内容保留为 float
类型并调整显示设置。
例如,我用一些随机数生成了一个 df
。
df = pd.DataFrame({"Item": ["A","B"],"Sub": [1,1],"Value": [float(31132314122123.1),float(324231235232315.1)]})
# Item Sub Value
#0 A 1 3.113231e+13
#1 B 1 3.242312e+14
如果我们 print(df)
,我们可以看到 Sub
值为 ints
,Value
值为 floats
。
Item object
Sub int64
Value float64
dtype: object
然后您可以调用 pd.options.display.float_format = '{:.1f}'.format
来取消 floats
的科学记数法,同时保留 float
格式。
# Item Sub Value
#0 A 1 31132314122123.1
#1 B 1 324231235232315.1
Item object
Sub int64
Value float64
dtype: object
如果您想要恢复科学记数法,可以调用 pd.reset_option('display.float_format')
好的。我发现了一个叫做 option_context for pandas 的东西,它允许使用 with 语句更改特定情况/操作的显示选项。
with pd.option_context('display.float_format',{:.2f}.format):
print(df)
因此,我们不必再次重置选项,并且文件中所有其他数据的选项都保持默认。
遗憾的是,我找不到以不同浮点格式存储不同列的方法(例如,一列带有货币 - 逗号分隔和 2 位小数,而下一列以百分比表示 - 非逗号和 2 位小数。)