Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas Can';t似乎没有缩短我的熊猫列的十进制数_Pandas_Decimal - Fatal编程技术网

Pandas Can';t似乎没有缩短我的熊猫列的十进制数

Pandas Can';t似乎没有缩短我的熊猫列的十进制数,pandas,decimal,Pandas,Decimal,所以我有一个df列,我通过取其他三个列的平均值来创建它 df['Avg_Grade']=df.loc[:,'G1':'G3']平均值(轴=1) 该系列看起来像这样(只是一个示例) 我试图截断输出以显示如下内容 0 5.67 (5.66 is also fine) 1 5.33 2 8.33 3 14.67 4 8.67 我已经用下面的代码处理了模块Decimal,但是我得到了一个错误 from decimal import * getcontext()

所以我有一个df列,我通过取其他三个列的平均值来创建它

df['Avg_Grade']=df.loc[:,'G1':'G3']平均值(轴=1)

该系列看起来像这样(只是一个示例)

我试图截断输出以显示如下内容

 0   5.67 (5.66 is also fine)
 1   5.33  
 2   8.33  
 3   14.67  
 4   8.67
我已经用下面的代码处理了模块
Decimal
,但是我得到了一个错误

from decimal import *
getcontext().prec = 4


df['Avg_Grade'] = Decimal(df.loc[:,'G1':'G3'].mean(axis =1))


 Traceback (most recent call last):
  File "<pyshell#409>", line 1, in <module>
    df['Avg_Grade'] = Decimal(df.loc[:,'G1':'G3'].mean(axis =1))
  File "C:\Python27\lib\decimal.py", line 657, in __new__
    raise TypeError("Cannot convert %r to Decimal" % value)
TypeError: Cannot convert 0       5.666667
从十进制导入*
getcontext().prec=4
df['Avg_Grade']=十进制(df.loc[:,'G1':'G3']平均值(轴=1))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
df['Avg_Grade']=十进制(df.loc[:,'G1':'G3']平均值(轴=1))
文件“C:\Python27\lib\decimal.py”,第657行,新__
raise TypeError(“无法将%r转换为十进制”%value)
TypeError:无法转换0 5.666667

有几种方法可以做到这一点,但它们并不适用于所有情况

下面是一个数据帧示例:

In [1]:
df = pd.DataFrame(10*np.random.rand(4,3), columns=['G1','G2','G3'])
df['Avg_Grade'] = df.loc[:,'G1':'G3'].mean(axis =1)
df

Out [1]:
         G1        G2        G3  Avg_Grade
0  9.843159  4.155922  9.652694   7.883925
1  2.108822  9.347634  9.271351   6.909269
2  2.681108  3.071449  0.387151   2.046569
3  4.017461  9.464408  0.395482   4.625783
1。使用全局设置

所有浮点数将以两位小数显示。您可以使用以下任一选项:

pd.options.display.precision = 2
pd.set_option('display.precision', 2)

In [3]: df

Out[3]:
     G1    G2    G3  Avg_Grade
0  9.84  4.16  9.65       7.88
1  2.11  9.35  9.27       6.91
2  2.68  3.07  0.39       2.05
3  4.02  9.46  0.40       4.63
2。在带有语句的
中使用全局设置。

with语句中显示的所有浮点将以两位小数显示,但之后将恢复为常规值(默认值:6)

一旦超出with语句的范围:

In [5]: print(df['Avg_Grade'])
0    7.883925
1    6.909269
2    2.046569
3    4.625783
Name: Avg_Grade, dtype: float64

print(df['Avg_Grade'])
3。使用HTML样式器。

这要求您在Jupyter笔记本中运行代码

df.style.set_precision(3)
4。使用
round()

如果要显示某些内容,还可以使用以下内容:

df.round(2)
df['Avg_Grade'].round(2)
5。创建另一个数据帧或就地修改

这种方式将允许您逐列自定义精度,但基础数据已更改,因此您可能希望在副本上执行此操作

# Create a copy so we don't mess up the original df
df_print = df.copy()

# Round down some numbers
df_print['Avg_Grade'] = df_print['Avg_Grade'].round(2)
df_print['G1'] = df_print['Avg_Grade'].round(4)

# Add more decimals: need to switch that to a string representation
df_print['G3'] = df_print['G3'].map(lambda x: "{:,.10f}".format(x))

# display
df_print

     G1        G2            G3  Avg_Grade
0  7.88  4.155922  9.6526935480       7.88
1  6.91  9.347634  9.2713506079       6.91
2  2.05  3.071449  0.3871511232       2.05
3  4.63  9.464408  0.3954815519       4.63

尝试
df.Avg_Grade.round(2)
谢谢,这似乎很有效!太神了非常感谢你抽出时间解释所有的方法。我要把它打印出来=)或者你可以把它加入书签并保存一棵树!;)请注意,这可能不是“所有的方法”(很多种方法可以让猫在大熊猫身上剥皮),但5是一个好的开始!
df.round(2)
df['Avg_Grade'].round(2)
# Create a copy so we don't mess up the original df
df_print = df.copy()

# Round down some numbers
df_print['Avg_Grade'] = df_print['Avg_Grade'].round(2)
df_print['G1'] = df_print['Avg_Grade'].round(4)

# Add more decimals: need to switch that to a string representation
df_print['G3'] = df_print['G3'].map(lambda x: "{:,.10f}".format(x))

# display
df_print

     G1        G2            G3  Avg_Grade
0  7.88  4.155922  9.6526935480       7.88
1  6.91  9.347634  9.2713506079       6.91
2  2.05  3.071449  0.3871511232       2.05
3  4.63  9.464408  0.3954815519       4.63