迭代数据框中的某些列

Ale*_*x T 5 python dataframe pandas

嗨,我有这样的数据框:

    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%
Run Code Online (Sandbox Code Playgroud)

首先,我想将包含数字(当前是字符串)的列中的值转换为浮点值.所以在这里我将有4个需要转换浮动的中间列.简单的循环是否适合这种情况?

第二,最后一列存在一个问题,'Dividend'其中百分比值为字符串.事实上,我可以将其转换为小数,但我想是否有办法仍然保留%,并且值仍然可以计算.

对这两个问题的任何想法?

piR*_*red 2

计划

  • 取出来,'Ticker'因为它不是数字
  • 用于通过剥离来assign覆盖Dividend%
  • 使用applywithpd.to_numeric转换所有列
  • 用于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
Run Code Online (Sandbox Code Playgroud)

更多行
更具可读性

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
Run Code Online (Sandbox Code Playgroud)