【问题标题】:Pandas convert column from str to floatPandas 将列从 str 转换为 float
【发布时间】:2018-07-16 13:20:09
【问题描述】:

对于下面的数据框,我使用的是代码

df['%'] = ((df['Code Lines'] / df['Code Lines'].sum()) * 100).round(2).astype(str) + '%'

输出

Language    # of Files  Blank Lines Comment Lines   Code Lines  % 
C++              15          66           35            354    6.13%
C/C++ Header      1           3            7              4    0.07%
Markdown          6           73           0            142    2.46%
Python           110         1998       2086           4982    86.27%
Tcl/Tk            1          14           18            273    4.73%
YAML              1           0            6             20    0.35%

我正在尝试将 str 转换为 float

df['%'] = df['% of Total (Code Only)'].astype('float64')

遇到错误

文件 "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/core/dtypes/cast.py", 第 730 行,在 astype_nansafe 中 return arr.astype(dtype, copy=True) ValueError: could not convert string to float: '0.35%'

有没有办法将列 % 与符号 % 一起保持为浮点数

【问题讨论】:

  • 如果您保留% 符号,它将不会浮动。但是如果你想这样做很容易删除它
  • 你应该停止df['%'] = ((df['Code Lines'] / df['Code Lines'].sum()) * 100).round(2)

标签: python python-3.x pandas


【解决方案1】:

使用str[:-1] 删除indexing with str 的最后一个值(%):

df['%'] = df['%'].str[:-1].astype('float64')

但如果可能的话更好的是:

df['%'] = ((df['Code Lines'] / df['Code Lines'].sum()) * 100).round(2)

print (df)
       Language  # of Files  Blank  Lines Comment  Lines Code Lines      %
0           C++          15     66             35               354   6.13
1  C/C++ Header           1      3              7                 4   0.07
2      Markdown           6     73              0               142   2.46
3        Python         110   1998           2086              4982  86.27
4        Tcl/Tk           1     14             18               273   4.73
5          YAML           1      0              6                20   0.35

【讨论】:

    【解决方案2】:

    另一种方式,使用strip

    df['%'] = df['%'].str.strip('%').astype('float64')
    
    0     6.13
    1     0.07
    2     2.46
    3    86.27
    4     4.73
    5     0.35
    Name: %, dtype: float64
    

    【讨论】:

      【解决方案3】:

      您可以删除字符串中的最后一个字符,如下所示:

      str[:-1] 删除最后一个字符

      df['%'] = df['%'].str[:-1].astype('float64')

      或者您可以使用 replace() 将% 替换为空白字符。

      df['%'] = df['%'].replace("%","").astype('float64')

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-20
        • 2018-03-08
        • 2021-11-02
        • 2018-07-28
        相关资源
        最近更新 更多