如何在R中使用dplyr筛选两个按数值排序模式之间的所有行
Pandas 按版本号范围筛选行的解决方案
你需要先将字符串格式的版本号转换为可按数值逻辑比较的格式,再做范围筛选,避免字符串逐字符比较的逻辑误差,两种常用实现方式如下:
方法1:拆分版本段比较(无需额外依赖)
import pandas as pd # 假设存储版本号的列名为version,可替换为你实际的列名 # 按.拆分版本号,提取前缀、主版本、次版本段 df[['prefix', 'major_ver', 'minor_ver', 'suffix']] = df['version'].str.split('.', expand=True) # 将版本号转换为整数类型 df['major_ver'] = df['major_ver'].astype(int) df['minor_ver'] = df['minor_ver'].astype(int) # 筛选大于 1st.7.1.* 且小于 1st.13.1.* 的行 result_df = df[ (df['prefix'] == '1st') & ((df['major_ver'] > 7) | ((df['major_ver'] == 7) & (df['minor_ver'] > 1))) & ((df['major_ver'] < 13) | ((df['major_ver'] == 13) & (df['minor_ver'] < 1))) ].drop(columns=['prefix', 'major_ver', 'minor_ver', 'suffix'])
方法2:使用版本解析工具(通用度更高,适配复杂版本格式)
借助packaging库的版本解析能力,不需要手动拆分版本段,逻辑更简洁:
import pandas as pd from packaging.version import Version df['ver_obj'] = df['version'].apply(lambda x: Version(x.replace('1st.', ''))) result_df = df[ (df['ver_obj'] > Version('7.1')) & (df['ver_obj'] < Version('13.1')) ].drop(columns='ver_obj')
如果运行提示缺少packaging库,先执行pip install packaging安装即可。
你当前使用的DataFrame参考示例:
内容的提问来源于stack exchange,提问作者Tinniam V. Ganesh
相关产品推荐
相关产品推荐

