2024-10-01 07:42:20 发布
网友
我的数据框中有一些列如下所示:
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是对象。我可以一个接一个地做,但是有没有一种优雅而快速的方法来完成转换呢?你知道吗
您可以根据-符号将其分开,并使用split获取最后一个元素。这允许您将数据转换成float,然后再转换成integer(如果您愿意的话)。你知道吗
-
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+
+
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
您可以根据
-
符号将其分开,并使用split
获取最后一个元素。这允许您将数据转换成float
,然后再转换成integer
(如果您愿意的话)。你知道吗或者如果你想转换成整数
如果您确实需要两个数字之间的取整,这可能是不正常的,您可以这样做:
IIUC,我们可以使用一点正则表达式来提取在行终止符之前抓住最后一个元素的所有数字
在
\n
使用$
\d+
匹配一个数字(等于[0-9])+
量词-一次和无限次之间的匹配,与相关问题 更多 >
编程相关推荐