2017-04-08 123 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