Pandas中Drop函数删除索引过多问题排查求助
问题原因及解决办法
核心问题
- 日期类型不匹配:原
main_df的UPDATED列大概率是字符串或带时间戳的datetime类型,而新设置的date_是纯date类型,混合类型下的相等判断会出错,导致新添加的7126条ELLICOM数据被误判为不符合条件而删除。 - 原数据存在旧ELLICOM条目:原
main_df中本身包含MANUFACTURER为ELLICOM的行,这些行的更新日期不是当前日期,会被删除;若再叠加日期类型不匹配的问题,新数据也会被误删,最终只剩原main_df中的非ELLICOM行。
解决方案
方案1:统一日期类型后执行删除
先将所有UPDATED列转换为一致的date类型,再进行判断:
# 转换原main_df的UPDATED列为date类型 main_df['UPDATED'] = pd.to_datetime(main_df['UPDATED']).dt.date date_ = pd.Timestamp('now').date() ellicom_df['UPDATED'] = date_ ellicom_df['MANUFACTURER'] = 'ELLICOM' # 合并数据 main_df = pd.concat([main_df, ellicom_df], sort=False) # 过滤目标行(用布尔索引更直观) main_df = main_df[~((main_df['MANUFACTURER'] == 'ELLICOM') & (main_df['UPDATED'] != date_))] print(main_df.shape)
方案2:直接替换旧ELLICOM数据(更高效)
如果目标是用新的ELLICOM数据完全替换旧数据,直接先删除原main_df中的ELLICOM行,再合并新数据,彻底避开日期判断问题:
# 删除原main_df中所有ELLICOM条目 main_df = main_df[main_df['MANUFACTURER'] != 'ELLICOM'] date_ = pd.Timestamp('now').date() ellicom_df['UPDATED'] = date_ ellicom_df['MANUFACTURER'] = 'ELLICOM' # 合并新数据 main_df = pd.concat([main_df, ellicom_df], sort=False) print(main_df.shape) # 结果为:原main_df非ELLICOM行数 + 7126
内容的提问来源于stack exchange,提问作者Priniotis
相关产品推荐
相关产品推荐

