使用isin筛选字典中存储的Pandas DataFrame行结果为空如何解决?
问题排查与解决方案
你的筛选语法本身没有错误,df['abc']取出的就是标准Pandas DataFrame,和直接操作独立DataFrame的逻辑完全一致,结果为空、类型不符的问题可按下面的步骤定位解决:
1. 为什么isin()筛选结果为空
大概率是列名或列值不匹配导致的,按下面步骤排查:
- 先确认筛选列名完全正确:打印
df['abc'].columns核对列名的拼写、大小写,注意你代码中一会儿用到art列、一会儿用到art_kennz列,需确认实际要筛选的列名是否和代码一致,列名前后是否存在不可见空格。 - 再核对列值内容:打印
df['abc']['art_kennz'].unique()查看该列的所有唯一值,确认是否存在多余空格、大小写差异,比如实际值是'R '(末尾带空格)、'r'(小写)都无法和'R'匹配。
如果确认列值存在多余空格,可先清洗列值再筛选,示例代码:
# 先去除列值前后空格再匹配 df_merged = df['abc'][df['abc']['art_kennz'].str.strip().isin(['R','P','SP','GP'])] # 更规范的loc写法,可读性更高 df_merged = df['abc'].loc[df['abc']['art_kennz'].str.strip().isin(['R','P','SP','GP']), :]
2. 为什么返回布尔Series而非DataFrame
df['abc']['art_kennz'].isin(['R','P','SP','GP'])本身的返回值就是每行是否匹配的布尔类型Series,只有将这个布尔Series作为行索引传入DataFrame的筛选括号中,才会返回符合条件的行组成的DataFrame,你只写了isin()的部分,没有做行筛选操作,自然只能得到布尔Series。
内容的提问来源于stack exchange,提问作者x89
相关产品推荐
相关产品推荐

