如何筛选Pandas DataFrame中的整数值(排除浮点数)
筛选DataFrame字符串列中仅含整数的行
方法1:正则表达式匹配(精准匹配字符串格式)
直接针对字符串的格式进行匹配,是最符合你需求的方案——只保留本身就是纯整数格式的字符串(排除带小数点的浮点数格式,包括'1.0'这类)。
使用正则表达式 ^[-+]?\d+$,可以匹配正整数、负整数、带正负号的整数,完全不包含小数点。
代码示例:
import pandas as pd # 示例数据 df = pd.DataFrame({'col1': ['1', '1.1', '-2', '3.0', 'abc', '+5']}) # 生成筛选掩码 integer_mask = df['col1'].str.match(r'^[-+]?\d+$') # 筛选结果 filtered_df = df[integer_mask] print(filtered_df)
执行后会保留 '1'、'-2'、'+5',排除 '1.1'、'3.0'、'abc'。
方法2:数值转换后验证整数性
如果你的场景允许保留'1.0'这类**数值为整数但字符串带.0**的行,可以先将字符串转为数值,再验证其是否等于自身的整数部分:
import pandas as pd df = pd.DataFrame({'col1': ['1', '1.1', '-2', '3.0', 'abc', '+5']}) # 转换为数值,无法转换的设为NaN numeric_vals = pd.to_numeric(df['col1'], errors='coerce') # 筛选条件:数值非空,且等于其整数形式 integer_mask = numeric_vals.notnull() & (numeric_vals == numeric_vals.astype(int)) filtered_df = df[integer_mask] print(filtered_df)
这个方法会保留 '1'、'-2'、'3.0'、'+5',排除 '1.1'、'abc'。
内容的提问来源于stack exchange,提问作者Melissa Guo
相关产品推荐
相关产品推荐

