循环内提取值过滤DataFrame返回空结果,直接过滤却正常的技术问题
问题解决:循环过滤DataFrame返回空结果的原因与修复
核心原因:数据类型不匹配
直接赋值的code = 46897是整数类型,但从df_products["ProductCode"][el]提取的code看起来是46897,实际大概率是字符串类型(比如"46897")。不同类型的数值无法匹配,导致过滤条件df["ProductCode"]==code返回全False,最终得到空DataFrame。
验证方法
打印两个场景下code的类型,确认差异:
# 直接赋值场景 code = 46897 print(type(code)) # 输出 <class 'int'> # 循环场景 for el in range(0, 1): code = df_products["ProductCode"][el] print(type(code)) # 大概率输出 <class 'str'>
修复方案
方案1:统一DataFrame列类型
把df的ProductCode列转换成和df_products一致的类型:
如果df_products里是字符串类型:
df["ProductCode"] = df["ProductCode"].astype(str)
如果df_products里是整数类型(且列中无非数值内容):
df["ProductCode"] = df["ProductCode"].astype(int)
方案2:循环中转换提取值的类型
在循环里把提取的code转换成和df一致的类型:
for el in range(0, 1): code = df_products["ProductCode"][el] # 若df中是整数类型,转成int code = int(code) print(len(df[df["ProductCode"]==code])) # 此时会返回正确的52
额外建议
避免直接用索引[el]提取DataFrame元素,推荐用.iloc[el]更安全:
code = df_products["ProductCode"].iloc[el]
内容的提问来源于stack exchange,提问作者Hurmet Noka
相关产品推荐
相关产品推荐

