2017-04-08 60 views
5

您好我有這樣的數據幀:迭代對某些列的數據幀

Ticker P/E  P/S  P/B P/FCF Dividend 
No.      
1 NTCT 457.32 3.03 1.44 26.04 - 
2 GWRE 416.06 9.80 5.33 45.62 - 
3 PEGA 129.02 4.41 9.85 285.10 0.28% 
4 BLKB 87.68 4.96 14.36 41.81 0.62% 

首先,我要值轉換中包含數字(這是當前字符串)爲浮點值的列。所以在這裏我會有需要轉換的4箇中間列浮動。簡單的循環會在這種情況下工作嗎?

第二件事,最後一列'Dividend'有一個問題,其中有一個百分比值作爲字符串。事實上,我可以將它轉換爲小數,但是我想如果有一種方法仍然保留%,並且值仍然可以計算。

這兩個問題的任何想法?

+0

你是說我刪了?是的,我修好了,再次問,但無論如何,它發生了這麼好的事情。 –

回答

2

計劃

  • 取出'Ticker',因爲它不是數字
  • 使用assign通過條帶化掉%
  • 使用applypd.to_numeric覆蓋Dividend所有列轉換
  • 使用eval得到Dividend到正確的十進制空間


df[['Ticker']].join(
    df.assign(
     Dividend=df.Dividend.str.strip('%') 
    ).drop('Ticker', 1).apply(
     pd.to_numeric, errors='coerce' 
    ) 
).eval('Dividend = Dividend/100', inplace=False) 

    Ticker  P/E P/S P/B P/FCF Dividend 
No.            
1  NTCT 457.32 3.03 1.44 26.04  NaN 
2  GWRE 416.06 9.80 5.33 45.62  NaN 
3  PEGA 129.02 4.41 9.85 285.10 0.0028 
4  BLKB 87.68 4.96 14.36 41.81 0.0062 

更多行
更易讀

nums = df.drop('Ticker', 1).assign(Dividend=df.Dividend.str.strip('%')) 
nums = nums.apply(pd.to_numeric, errors='coerce') 
nums = nums.assign(Dividend=nums.Dividend/100) 
df[['Ticker']].join(nums) 

    Ticker  P/E P/S P/B P/FCF Dividend 
No.            
1  NTCT 457.32 3.03 1.44 26.04  NaN 
2  GWRE 416.06 9.80 5.33 45.62  NaN 
3  PEGA 129.02 4.41 9.85 285.10 0.0028 
4  BLKB 87.68 4.96 14.36 41.81 0.0062 
+0

因此,將百分比轉換爲十進制數是唯一正確的方法嗎? –

+0

@AlexT不!我還沒有弄明白。要走的路是創建一個名爲percent的自定義類,它從float繼承,但是您覆蓋__repr__方法。問題是,當我做到熊貓或numpy轉換它回到浮動。我很好奇如何制止這種情況。我也想使用它。只是還沒有想出來。 – piRSquared

+0

您是否認爲將float顯示格式設置爲這個格式會解決問題? 'pd.options.display.float_format ='{:.2f}%'。format' 它應該只適用於一列:/ –

1

假設所有P/...列包含正確的號碼:

In [47]: df.assign(Dividend=pd.to_numeric(df.Dividend.str.replace(r'\%',''), errors='coerce') 
    ...:      .div(100)) \ 
    ...: .set_index('Ticker', append=True) \ 
    ...: .astype('float') \ 
    ...: .reset_index('Ticker') 
    ...: 
Out[47]: 
    Ticker  P/E P/S P/B P/FCF Dividend 
No. 
1  NTCT 457.32 3.03 1.44 26.04  NaN 
2  GWRE 416.06 9.80 5.33 45.62  NaN 
3  PEGA 129.02 4.41 9.85 285.10 0.0028 
4  BLKB 87.68 4.96 14.36 41.81 0.0062