Pandas Can';t似乎没有缩短我的熊猫列的十进制数
所以我有一个df列,我通过取其他三个列的平均值来创建它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['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