Python 仅选择由括号包围的字符串的内容(数据框内的字符串)
我有一个熊猫数据框,看起来像Python 仅选择由括号包围的字符串的内容(数据框内的字符串),python,regex,pandas,Python,Regex,Pandas,我有一个熊猫数据框,看起来像 Run Time ... K Recovery Ca Recovery 0 14 05:02:54 ... 61,498.671 (492.0%) 62,095.863 (496.8%) 1 19 08:14:59 ... 63,576.997 (508.6%) 63,986.691 (511.9%) 2 35 10:30:42 ... 63,609.755 (508.9%) 64,
Run Time ... K Recovery Ca Recovery
0 14 05:02:54 ... 61,498.671 (492.0%) 62,095.863 (496.8%)
1 19 08:14:59 ... 63,576.997 (508.6%) 63,986.691 (511.9%)
2 35 10:30:42 ... 63,609.755 (508.9%) 64,400.180 (515.2%)
我希望它只保留百分比,并删除所有非数字的内容,使其看起来像这样:
Run Time ... K Recovery Ca Recovery
0 14 05:02:54 ... 492.0 496.8
1 19 08:14:59 ... 508.6 511.9
2 35 10:30:42 ... 508.9 515.2
当我创建构成pandas数据库的列表时,我可以通过向每个字符串添加re.findall(r'\(.*?\),CaRecovery)
函数来分离百分比,但是这给了我一些奇怪的格式问题:
Run Time Be Recovery ... Al Recovery K Recovery Ca Recovery
0 14 05:02:54 [(98.2%)] ... [(487.1%)] [(492.0%)] [(496.8%)]
1 19 08:14:59 [(101.6%)] ... [(499.8%)] [(508.6%)] [(511.9%)]
2 35 10:30:42 [(101.5%)] ... [(502.9%)] [(508.9%)] [(515.2%)]
它在括号周围加了方括号,现在出于某种原因
df = df.replace(r'[%]', '', regex=True)
对数据库没有影响
我需要的只是数字,这样我就可以将列转换为浮点数。试试:
df.update(
df.filter(regex=r"Recovery$").apply(
lambda x: x.str.extract(r"\(([\d.-]+)%\)", expand=False)
)
)
print(df)
印刷品:
运行时K恢复Ca恢复
0 14 05:02:54 492.0 496.8
1 19 08:14:59 508.6 511.9
2 35 10:30:42 508.9 515.2
试试:
印刷品:
运行时K恢复Ca恢复
0 14 05:02:54 492.0 496.8
1 19 08:14:59 508.6 511.9
2 35 10:30:42 508.9 515.2
使用分组并从返回的列表中提取响应:
import re
test_string = r"62,095.863 (496.8%)"
pattern = r"\(([^%]*)%?\)" # without %
print(re.findall(pattern, test_string)[0])
pattern2 = r"\((.*)\)" # with %
print(re.findall(pattern2, test_string)[0])
使用分组并从返回的列表中提取响应:
import re
test_string = r"62,095.863 (496.8%)"
pattern = r"\(([^%]*)%?\)" # without %
print(re.findall(pattern, test_string)[0])
pattern2 = r"\((.*)\)" # with %
print(re.findall(pattern2, test_string)[0])
您应该在正则表达式中添加分组括号,以消除括号字符。此外,如果在提取的结果周围加上括号,则处理结果一定不正确。方括号可能是字符串列表,因为
re.findall()
返回一个列表。您可能需要进一步为其下标以获取字符串,例如result=re.findall(…
然后使用result[0]
获取字符串。此外,由于字符串在列表中,因此无法获取df.replace工作。A将nice@anky是的,对不起,这是一个好主意,我将开始在我的未来包括这一点questions@JulianAvila很高兴你会考虑这个。干杯!!!你应该在正则表达式中添加分组括号给EL。对括号字符进行iminate。此外,如果在提取的结果周围使用括号,则处理结果肯定不正确。方括号可能是字符串列表,因为re.findall()
返回一个列表。您可能需要进一步为其下标以获取字符串,例如result=re.findall(…
然后使用result[0]
获取字符串。此外,由于字符串在列表中,因此无法获取df.replace works。A将nice@anky是的,对不起,这是一个好主意,我将开始在我的未来包括这一点questions@JulianAvila高兴你会考虑这个。干杯!!!