将数据帧字符串类别转换为数字

2024-10-01 07:42:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数据框中有一些列如下所示:

 total
  NaN
26-27
52-53
88-89
  165
  280
  399
  611
  962
 1407
 1937

我想用取整法将它们转换成数值:

 total
  NaN
   27
   53
   89
  165
  280
  399
  611
  962
 1407
 1937

显然,pd.to\数字()不起作用,因为26-27是对象。我可以一个接一个地做,但是有没有一种优雅而快速的方法来完成转换呢?你知道吗


Tags: to数据对象方法数字nan数值total
3条回答

您可以根据-符号将其分开,并使用split获取最后一个元素。这允许您将数据转换成float,然后再转换成integer(如果您愿意的话)。你知道吗

>>> df.total.str.split('-').str[-1].astype(float)
0        NaN
1       27.0
2       53.0
3       89.0
4      165.0
5      280.0
6      399.0
7      611.0
8      962.0
9     1407.0
10    1937.0
Name: total, dtype: float64

或者如果你想转换成整数

>>> df.total.str.split('-').str[-1].astype(float).astype('Int64')
0      NaN
1       27
2       53
3       89
4      165
5      280
6      399
7      611
8      962
9     1407
10    1937
Name: total, dtype: Int64

如果您确实需要两个数字之间的取整,这可能是不正常的,您可以这样做:


df.total.str.split('-').apply(pd.Series).astype(float).max(axis=1).astype('Int64')                                                                                                    

0      NaN
1       27
2       53
3       89
4      165
5      280
6      399
7      611
8      962
9     1407
10    1937
dtype: Int64

IIUC,我们可以使用一点正则表达式来提取在行终止符之前抓住最后一个元素的所有数字

\n使用$

\d+匹配一个数字(等于[0-9])

+量词-一次和无限次之间的匹配,与

df['total'].str.extract(r'(\d+)$').astype(float)
out:
0        NaN
1       27.0
2       53.0
3       89.0
4      165.0
5      280.0
6      399.0
7      611.0
8      962.0
9     1407.0
10    1937.0
Name: total, dtype: float64

相关问题 更多 >