我从一个来源接收不同的系列。其中一些级数的值很大(X十亿)。然后,我将所有系列组合为一个数据框架,每个系列都有单独的列。
现在,当我打印数据框架时,序列中的大数字以科学记数法显示。即使单独打印该系列也能显示科学记数法中的数字。
Dataframe df (multiindex)输出为:
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位小数。对科学价值没有任何影响。
Then I try:
df.astypes(floats)
不做任何可见的事情。输出保持不变。
我们还可以如何将科学记数法更改为数据框架内的普通浮点数?我不想用转换后的值创建一个新列表。数据框本身应该以正常形式显示这些值。
你们能帮我找到解决这个问题的办法吗?
谢谢。
我建议将所有内容保持为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的东西,它允许使用with语句为特定的case/action改变显示选项。
with pd.option_context('display.float_format',{:.2f}.format):
print(df)
因此,我们不需要重新设置选项,以及文件中所有其他数据的选项保持默认值。
遗憾的是,我无法找到以不同浮点格式存储不同列的方法(例如,一列使用货币-逗号分隔和2个小数,而下一列使用百分比-非逗号和2个小数)
尝试df['column'] = df['column'].astype(str)
。如果不能工作,您应该在从数据