Pandas Merge后筛选date_y为空值失败的技术问题
解决左连接后筛选
date_y为空行的问题 我来帮你搞定这个筛选问题,之前的方法没生效大概率是因为你看到的“空白”不是你以为的空字符串,或者列名有小细节没注意到,咱们一步步来排查解决:
第一步:先确认列名和date_y的实际值类型
首先先确保你要筛选的列名确实是date_y——有时候合并后重名列会自动加后缀,先打印列名确认:
print(test2.columns)
然后查看date_y列的所有唯一值,搞清楚到底是NaN(左连接未匹配时的默认空值)、空字符串'',还是带空格的空白内容:
print(test2['date_y'].unique())
第二步:根据实际情况选择筛选方式
情况1:date_y是NaN(最常见的左连接未匹配场景)
如果unique()结果里出现了nan,那用isna()方法筛选才有效:
# 筛选date_y为NaN的行 filtered_test2 = test2[test2['date_y'].isna()] # 或者用query写法 filtered_test2 = test2.query('date_y.isna()')
情况2:date_y是空字符串或带空格的空白
如果unique()里有空字符串''或者类似' '的空白内容,先去掉首尾空格再筛选:
# 处理空白后筛选空字符串 filtered_test2 = test2[test2['date_y'].str.strip() == '']
情况3:两种空值都存在(NaN+空白/空字符串)
把两种情况合并起来,一网打尽所有空值行:
# 同时筛选NaN和空白/空字符串的行 filtered_test2 = test2[test2['date_y'].isna() | (test2['date_y'].str.strip() == '')]
为什么之前的方法没生效?
- 左连接未匹配上的行,pandas默认会填充
NaN而不是空字符串,这时候用== ''是匹配不到的,因为NaN和任何值比较结果都是False - 如果是带空格的空白字符串,直接用
== ''也匹配不上,必须先通过str.strip()去掉首尾空格才能准确匹配
内容的提问来源于stack exchange,提问作者excelguy
相关产品推荐
相关产品推荐

