Pandas处理Excel数据时NaN值无法归入同一列表的问题咨询
解决方案
核心原因
你之前的推测是正确的,Python中NaN != NaN是固定规则,因此直接用==判断无法匹配NaN值,需要用pandas内置的缺失值判断函数处理。
修改后的完整代码
import pandas as pd df = pd.read_excel('/Users/jedknauer/code/Python xlsx/OPOS-Liste Kreditoren zum 31.08.2021.xlsx') # 原排序代码保留,不影响后续逻辑 df.sort_values("Unnamed: 2", ascending = False)["Unnamed: 2"] new_objects = [] for index, row in df.iterrows(): b = row["Unnamed: 2"] # 初始化默认是新值,找到匹配项再改为False is_new = True # 第一条数据直接加入 if index == 0: new_objects.append([b, [b]]) continue # 遍历已有条目匹配 for i in new_objects: existing_val = i[0] # 匹配规则:要么两个都是NaN,要么两个都非NaN且值相等 if (pd.isna(b) and pd.isna(existing_val)) or (not pd.isna(b) and not pd.isna(existing_val) and b == existing_val): is_new = False i[-1].append(b) break if is_new: new_objects.append([b, [b]]) print(new_objects)
主要修改点
- 引入
pd.isna()函数专门判断NaN值,规避NaN == NaN返回False的规则问题 - 修正了原逻辑中
is_new的赋值错误:原逻辑只要碰到一个不匹配的条目就会把is_new设为True,会导致已经匹配到前面的条目、后面又碰到不匹配条目时被错误标记为新值 - 优化了初始列表赋值逻辑,避免出现分类对应的子列表为空的问题
内容的提问来源于stack exchange,提问作者cycy1234
相关产品推荐
相关产品推荐

