如何在Pandas DataFrame字符串的首次数字后添加.0?
在Pandas DataFrame字符串列中为首次出现的数字添加.0
可以通过Pandas的str.replace方法结合正则表达式,只替换每个字符串中首次出现的连续数字序列,为其添加.0。具体实现如下:
代码示例
import pandas as pd # 构造示例数据 data = { 'ID': [ 'Step 1', 'Step 2', 'Step 4B', 'Step 5', 'Step 6', 'Config 1', 'Config 2', 'Config 3', 'Config 4', 'Config 5', 'Config 6', 'Config 7', 'Config 8', 'Config 9', 'Config 10', 'Step 3(Option11)', 'Step 5(Option11)', 'Step 3(Option12)', 'Step 5(Option12)', 'Step 4A', 'Config 6(Option11)', 'Config 6(Option12)', 'Config 6(Option13)' ] } df = pd.DataFrame(data) # 执行替换:仅替换首次出现的数字序列,添加.0 df['ID'] = df['ID'].str.replace(r'(\d+)', r'\1.0', n=1) # 查看结果 print(df['ID'].to_string(index=False))
代码说明
- 正则表达式
r'(\d+)':匹配连续的数字序列。 - 替换模板
r'\1.0':将匹配到的数字序列(\1表示第一个捕获组的内容)替换为原数字加.0。 - 参数
n=1:指定只替换每个字符串中第一次出现的匹配项,避免修改后续出现的数字(比如括号内的11、12等)。
原正则失效原因
你之前使用的r'^(\D*)(\d+)(\D*)$'要求字符串严格符合「开头非数字+数字+结尾非数字」的整体结构,虽对部分字符串有效,但灵活性不足,无法适配所有场景。而上述方法无需限制字符串整体结构,仅针对首次出现的数字修改,更贴合需求。
运行结果
执行代码后会输出与你期望完全一致的内容:
ID Step 1.0 Step 2.0 Step 4.0B Step 5.0 Step 6.0 Config 1.0 Config 2.0 Config 3.0 Config 4.0 Config 5.0 Config 6.0 Config 7.0 Config 8.0 Config 9.0 Config 10.0 Step 3.0(Option11) Step 5.0(Option11) Step 3.0(Option12) Step 5.0(Option12) Step 4.0A Config 6.0(Option11) Config 6.0(Option12) Config 6.0(Option13)
内容的提问来源于stack exchange,提问作者KRANTHI KUMAR
相关产品推荐
相关产品推荐

