Pandas将列从字符串转换为浮点数

3
对于下面的数据框,我使用以下代码:
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%

我正在尝试将字符串转换为浮点数。

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函数中, 返回arr.astype(dtype, copy=True) ValueError: could not convert string to float: '0.35%'

有没有办法保持列的百分比为浮点数以及百分号符号


1
如果你保留%符号,它将不是浮点数。但是如果你想要移除它,那也很容易。 - sacuL
你应该停止使用 df['%'] = ((df['Code Lines'] / df['Code Lines'].sum()) * 100).round(2) - taras
3个回答

7

使用str[:-1]来通过字符串索引来删除最后一个值(%):

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

1
另一种方法是使用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

0

您可以按照以下方式从字符串中删除最后一个字符:

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

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接