首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Python中打印describe()函数中的整数?

如何在Python中打印describe()函数中的整数?
EN

Stack Overflow用户
提问于 2016-12-26 16:48:41
回答 2查看 45.7K关注 0票数 30

我正在使用Python的pandas做一些统计工作,并使用以下代码打印数据描述(平均值、计数、中位数等)。

代码语言:javascript
复制
data=pandas.read_csv(input_file)
print(data.describe())

但是我的数据非常大(大约400万行),而每行都有非常小的数据。所以不可避免的是,计数会很大,而平均值会很小,因此Python会这样打印它。

我只是想打印这些数字,只是为了方便使用和理解,例如,它最好是4393476而不是4.393476e+06。我用谷歌搜索了一下,我能找到的最多的是Display a float with two decimal places in Python和其他类似的帖子。但只有当我已经在变量中有数字时,这才能起作用。但我的情况并非如此。在我的例子中,我没有得到这些数字。这些数字是由describe()函数创建的,所以我不知道我会得到什么数字。

很抱歉,如果这看起来是一个非常基本的问题,我仍然是Python的新手。任何响应都会被忽略。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-26 17:15:44

假设您有以下DataFrame

编辑

我检查了文档,您可能应该使用pandas.set_option应用程序接口来完成此操作:

代码语言:javascript
复制
In [13]: df
Out[13]: 
              a             b             c
0  4.405544e+08  1.425305e+08  6.387200e+08
1  8.792502e+08  7.135909e+08  4.652605e+07
2  5.074937e+08  3.008761e+08  1.781351e+08
3  1.188494e+07  7.926714e+08  9.485948e+08
4  6.071372e+08  3.236949e+08  4.464244e+08
5  1.744240e+08  4.062852e+08  4.456160e+08
6  7.622656e+07  9.790510e+08  7.587101e+08
7  8.762620e+08  1.298574e+08  4.487193e+08
8  6.262644e+08  4.648143e+08  5.947500e+08
9  5.951188e+08  9.744804e+08  8.572475e+08

In [14]: pd.set_option('float_format', '{:f}'.format)

In [15]: df
Out[15]: 
                 a                b                c
0 440554429.333866 142530512.999182 638719977.824965
1 879250168.522411 713590875.479215  46526045.819487
2 507493741.709532 300876106.387427 178135140.583541
3  11884941.851962 792671390.499431 948594814.816647
4 607137206.305609 323694879.619369 446424361.522071
5 174424035.448168 406285189.907148 445616045.754137
6  76226556.685384 979050957.963583 758710090.127867
7 876261954.607558 129857447.076183 448719292.453509
8 626264394.999419 464814260.796770 594750038.747595
9 595118819.308896 974480400.272515 857247528.610996

In [16]: df.describe()
Out[16]: 
                     a                b                c
count        10.000000        10.000000        10.000000
mean  479461624.877280 522785202.100082 536344333.626082
std   306428177.277935 320806568.078629 284507176.411675
min    11884941.851962 129857447.076183  46526045.819487
25%   240956633.919592 306580799.695412 445818124.696121
50%   551306280.509214 435549725.351959 521734665.600552
75%   621482597.825966 772901261.744377 728712562.052142
max   879250168.522411 979050957.963583 948594814.816647

编辑结束

代码语言:javascript
复制
In [7]: df
Out[7]: 
              a             b             c
0  4.405544e+08  1.425305e+08  6.387200e+08
1  8.792502e+08  7.135909e+08  4.652605e+07
2  5.074937e+08  3.008761e+08  1.781351e+08
3  1.188494e+07  7.926714e+08  9.485948e+08
4  6.071372e+08  3.236949e+08  4.464244e+08
5  1.744240e+08  4.062852e+08  4.456160e+08
6  7.622656e+07  9.790510e+08  7.587101e+08
7  8.762620e+08  1.298574e+08  4.487193e+08
8  6.262644e+08  4.648143e+08  5.947500e+08
9  5.951188e+08  9.744804e+08  8.572475e+08

In [8]: df.describe()
Out[8]: 
                  a             b             c
count  1.000000e+01  1.000000e+01  1.000000e+01
mean   4.794616e+08  5.227852e+08  5.363443e+08
std    3.064282e+08  3.208066e+08  2.845072e+08
min    1.188494e+07  1.298574e+08  4.652605e+07
25%    2.409566e+08  3.065808e+08  4.458181e+08
50%    5.513063e+08  4.355497e+08  5.217347e+08
75%    6.214826e+08  7.729013e+08  7.287126e+08
max    8.792502e+08  9.790510e+08  9.485948e+08

您需要摆弄一下pandas.options.display.float_format属性。注意,在我的代码中,我使用了import pandas as pd。一种快速解决方法类似于:

代码语言:javascript
复制
In [29]: pd.options.display.float_format = "{:.2f}".format

In [10]: df
Out[10]: 
             a            b            c
0 440554429.33 142530513.00 638719977.82
1 879250168.52 713590875.48  46526045.82
2 507493741.71 300876106.39 178135140.58
3  11884941.85 792671390.50 948594814.82
4 607137206.31 323694879.62 446424361.52
5 174424035.45 406285189.91 445616045.75
6  76226556.69 979050957.96 758710090.13
7 876261954.61 129857447.08 448719292.45
8 626264395.00 464814260.80 594750038.75
9 595118819.31 974480400.27 857247528.61

In [11]: df.describe()
Out[11]: 
                 a            b            c
count        10.00        10.00        10.00
mean  479461624.88 522785202.10 536344333.63
std   306428177.28 320806568.08 284507176.41
min    11884941.85 129857447.08  46526045.82
25%   240956633.92 306580799.70 445818124.70
50%   551306280.51 435549725.35 521734665.60
75%   621482597.83 772901261.74 728712562.05
max   879250168.52 979050957.96 948594814.82
票数 63
EN

Stack Overflow用户

发布于 2016-12-26 17:54:53

代码语言:javascript
复制
import numpy as np
import pandas as pd
np.random.seed(2016)
N = 4393476
df = pd.DataFrame(np.random.uniform(1e-4, 0.1, size=(N,3)), columns=list('ABC'))

desc = df.describe()
desc.loc['count'] = desc.loc['count'].astype(int).astype(str)
desc.iloc[1:] = desc.iloc[1:].applymap('{:.6f}'.format)
print(desc)

收益率

代码语言:javascript
复制
              A         B         C
count   4393476   4393476   4393476
mean   0.050039  0.050056  0.050057
std    0.028834  0.028836  0.028849
min    0.000100  0.000100  0.000100
25%    0.025076  0.025081  0.025065
50%    0.050047  0.050050  0.050037
75%    0.074987  0.075027  0.075055
max    0.100000  0.100000  0.100000

在引擎盖下,DataFrames是按列组织的。一列中的值只能有一种数据类型(列的dtype)。df.describe()返回的DataFrame包含浮点数据类型的列:

代码语言:javascript
复制
In [116]: df.describe().info()
<class 'pandas.core.frame.DataFrame'>
Index: 8 entries, count to max
Data columns (total 3 columns):
A    8 non-null float64
B    8 non-null float64
C    8 non-null float64
dtypes: float64(3)
memory usage: 256.0+ bytes

DataFrames不允许您将一行视为整数,而将其他行视为浮点数。但是,如果将DataFrame的内容更改为字符串,则可以完全控制这些值的显示方式,因为所有值都是字符串。

因此,要以所需的格式创建DataFrame,可以使用

代码语言:javascript
复制
desc.loc['count'] = desc.loc['count'].astype(int).astype(str)

count行转换为整数(通过调用astype(int)),然后将整数转换为字符串(通过调用astype(str))。然后

代码语言:javascript
复制
desc.iloc[1:] = desc.iloc[1:].applymap('{:.6f}'.format)

使用str.format method将其余浮点数转换为字符串,以将浮点数格式化为小数点后的6位数字。

或者,您可以使用

代码语言:javascript
复制
import numpy as np
import pandas as pd
np.random.seed(2016)
N = 4393476
df = pd.DataFrame(np.random.uniform(1e-4, 0.1, size=(N,3)), columns=list('ABC'))

desc = df.describe().T
desc['count'] = desc['count'].astype(int)
print(desc)

哪一项会产生

代码语言:javascript
复制
     count      mean       std     min       25%       50%       75%  max
A  4393476  0.050039  0.028834  0.0001  0.025076  0.050047  0.074987  0.1
B  4393476  0.050056  0.028836  0.0001  0.025081  0.050050  0.075027  0.1
C  4393476  0.050057  0.028849  0.0001  0.025065  0.050037  0.075055  0.1

通过转置desc DataFrame,count现在位于自己的列中。因此,现在可以通过将该列的数据类型转换为int来解决问题。

这样做的一个优点是,desc中的值仍然是数值。因此,仍然可以基于数值进行进一步的计算。

我认为这种解决方案更可取,前提是转置格式是可以接受的。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41328633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档