在Python中,我想解析一个字符串并将数字部分(可能有也可能没有小数点)作为浮点数返回,并将后缀作为字符串返回。例子有:
7.1 英寸 -> 7.1, 英寸
7.1” -> 7.1,“
7 英寸 -> 7.0,英寸
-10dB -> -10.0, 分贝
-10.2dB -> -10.2, 分贝
数字部分和后缀之间没有空格。另外,我想将其应用于具有此格式的 Pandas DataFrame 列,以便我可以按浮点值排序。然后,我想在排序后将后缀附加回列中的每个元素。请建议执行此操作的代码。谢谢!
您不需要为此创建新列,只需将
sort_values
与自定义 key
函数一起使用,该函数使用正则表达式并返回数字类型的数字。
正则表达式模式适用于问题中提供的数字。如果您的数据中有不同格式的数字,则可能需要调整模式。
import pandas as pd
import re
data = {"measurements": ["7.1inch", "7.1”", "7in", "-10dB", "-10.2dB", "text"]}
df = pd.DataFrame(data)
def extract_numeric(s):
match = re.match(r"(-?\d*\.?\d+)", s)
if match:
return float(match.group(1))
df = df.sort_values(by="measurements", key=lambda x: x.map(extract_numeric))
measurements
4 -10.2dB
3 -10dB
2 7in
0 7.1inch
1 7.1”
5 text