迭代数据框中的某些列

时间:2017-04-08 09:46:12

标签: python pandas dataframe

嗨我有这样的数据框:

    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'存在问题,其中百分比值为字符串。事实上,我可以将其转换为小数,但我想是否有办法仍然保留%并且值仍然可以计算。

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

2 个答案:

答案 0 :(得分:2)

计划

  • 取出'Ticker'因为它不是数字
  • 通过剥离assign
  • ,使用Dividend覆盖%
  • 使用applypd.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

更多行
更具可读性

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

答案 1 :(得分: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