2015-10-09 29 views
4

我試圖創建包含形式的字符串的數據序列:熊貓:映射數據序列(浮動到字符串)不除去尾隨零的

"%.2f +/- %.2f"

使用兩個大熊貓數據序列(測量值和他們的錯誤)。下面是我如何實現它:

df["F"] = df["Fint"].map(str) + " +/- " + df["Fint Err"].map(str) 

但是,映射(str)從系列值中刪除尾隨零。

例如,對於源'VLA3在6Lambda'。

In[101]: df["Fint"] 
Out[101]: 
Source Lambda Fint 
VLA 2 6.0  0.15 
     3.6  0.19 
VLA 3 6.0  0.40 
     3.6  0.29 
In[102]: df["Fint"].map(str) 
Out[102]: 
Source Lambda 
VLA 2 6.0  0.15 
     3.6  0.19 
VLA 3 6.0  0.4 

如何停止從被刪除的尾隨零?

很明顯,你可以看到我實際上使用了一個數據框(但是因爲map是一個數據系列func,我認爲這會簡化問題),如果有一種方法可以通過applymap實現,我會很高興知道。

謝謝!

+0

請問你用什麼web服務生成這個run-code-snippet部分的問題?它看起來很酷... – Mai

+0

它看起來很酷,是非常無用的。編輯它。 @Greg不要濫用片段以外的其他活動HTML/js – sehe

+0

我建議您編寫自己的lambda表達式來進行字符串格式設置,並指定小數點後保留的數字。 – Mai

回答

1

如果數據以浮點形式開始,那麼它沒有「尾隨零」。但是從你的例子來看,你真正想要的是讓所有的數字至少有4位數字,如果需要的話添加尾隨零。試試這個:

# function that maps float->str, then pads with "0" up to length 4 
to_4digit_str = lambda flt: str(flt).ljust(4,"0") 


df["F"] = df["Fint"].map(str) + " +/- " + df["Fint Err"].map(to_4digit_str) 
+0

非常感謝,這就像一個魅力(兩個系列的地圖(to_4d ...))。我嘗試過類似的東西,但無法實現。是否有任何方式使用格式字符串像這樣的地圖: fmt =「lambda x:%.2f」%str(x)for i,x in df [「Fint」]「 –

+0

減去lambda表達式 –

+0

不知道我完全理解你的問題,你可以做一些類似於 fmt =「%i%s」 format_line = lambda r:fmt%(r ['Fint'],str(r ['Fint err'])。 (4,'0')) df ['formatted_col'] = df.apply(format_line,axis = 1) 我在這裏使用的兩個技巧是1)在格式字符串中使用%i來表示它是一個整數(%f表示一個浮點數,但它呈現無尾隨零)和2)df上的apply函數。確保axis = 1。 –