2016-11-30 21 views
2

所以,我有我採取其他三列似乎無法縮短我的大熊貓列的十進制數字

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

該系列看起來像這樣(只是一個樣本的平均創造了DF列)

Avg_Grade 
0 5.666667 
1 5.333333 
2 8.333333 
3 14.666667 
4 8.666667 

我試圖截斷輸出到顯示類似

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 
+1

嘗試'df.Avg_Grade.round(2)' – piRSquared

+0

感謝這似乎工作! – Moondra

回答

3

有幾種方法可以做到這一點,但它們不適用於所有情況。

下面是一個例子數據框:

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語句中的全局設置。

內的with語句中顯示的所有花車將顯示兩位小數,但之後會恢復到普通值(默認值:6)

In [4]: with pd.option_context('display.precision', 2): 
      print(df) 
Out[4]: 
    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 

一旦你的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 Notebook中運行代碼。

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 
+1

令人驚歎。非常感謝你花時間解釋所有的方法。我打算打印出來=) – Moondra

+1

或者你可以將它加入書籤並保存一棵樹! ;) 請注意,它可能不是「所有的方法」(許多方法在熊貓皮膚貓),但5是一個好開始! –