条带化尾随非数字字符和最后 decimal/digit

Striping trailing non numeric characters and last decimal/digit

在我的 pandas 数据框中,有一列标记为 Android Ver.我必须从所有值中去除尾随的非数字字符(即单词“及以上”),所以结果是一个数字。如果有多个小数位(例如“x.y.z”),则只保留前两个部分(例如“x.y”)。例如,值“4.1 及以上”应更改为“4.1”。值“4.5.6 及以上”应更改为“4.5”。值“5.6.7”应更改为“5.6”。

目前看起来是这样的:

0        4.0.3 and up
1        4.0.3 and up
2        4.0.3 and up
4          4.4 and up
5          2.3 and up
             ...     
10833      2.2 and up
10834      4.1 and up
10835      4.0 and up
10836      4.1 and up
10837      4.1 and up

但我需要它看起来像这样:

0        4.0
1        4.0
2        4.0
4          4.4
5          2.3
             ...     
10833      2.2
10834      4.1
10835      4.0
10836      4.1
10837      4.1

我现在的代码是这样的:

Googleapps_df.replace(r'[.\d a-zA-Z%]', '', regex=True, inplace=True)

但它根本不起作用。

执行此操作的最佳方法是什么?

尝试 str.extract:

df['Version'] = df['Android Ver'].str.extract('^(\d+\.\d+)')
print(df)

# Output
        Android Ver Version
0      4.0.3 and up     4.0
1      4.0.3 and up     4.0
2      4.0.3 and up     4.0
4        4.4 and up     4.4
5        2.3 and up     2.3
10833    2.2 and up     2.2
10834    4.1 and up     4.1
10835    4.0 and up     4.0
10836    4.1 and up     4.1
10837    4.1 and up     4.1

正则表达式替换方法可能是:

df["Version"] = df["Android Ver"].str.replace(r' .*', '')

这将删除从第一个 space 到字符串末尾的所有内容,只留下版本号。