如何从DataFrame键值对列提取值大于500的键及全局最大值对应键
问题解决方法
报错原因分析
- 你调用
iterrows时遗漏了括号(),iterrows是方法不是属性,必须加()才能正确获取迭代对象,这是你代码报错的核心原因 - 原有拆分逻辑没有统一处理键值两侧的空格,极端场景下会出现拆分错误,单个键值对用
,拆分不会触发错误,不是问题根源
最优实现方案
优先用pandas向量化的apply操作替代显式iterrows循环,性能更高也更符合Python/pandas的代码风格,完整实现如下:
import pandas as pd # 模拟你的原始DataFrame,实际使用时替换为你自己的df即可 df = pd.DataFrame({ 'Frequency': [ 'PM : 100, AM : 587', 'GH : 257, PM : 675, JK : 843', 'AM : 54 , JK : 754, GH : 100, PO : 86', 'MN : 567', 'PM : 1023', 'ML : 200' ] }) # 单行频率字符串解析函数 def parse_frequency(freq_str): # 拆分所有键值对并去除冗余空格 item_list = [item.strip() for item in freq_str.split(',')] freq_dict = {} for item in item_list: key, val = item.split(':') freq_dict[key.strip()] = int(val.strip()) return freq_dict # 解析Frequency列为字典格式 df['freq_dict'] = df['Frequency'].apply(parse_frequency) # 需求1:提取所有值大于500的键值对 df['filtered_pairs'] = df['freq_dict'].apply(lambda x: {k:v for k,v in x.items() if v > 500}) # 需求2:统计全局最大值及对应键 all_pairs = {} for d in df['freq_dict']: all_pairs.update(d) max_value = max(all_pairs.values()) max_keys = [k for k,v in all_pairs.items() if v == max_value] # 输出结果 print("每行大于500的键值对:") print(df['filtered_pairs'].tolist()) print(f"\n全局最大值:{max_value},对应的键:{max_keys}")
补充说明
如果你坚持要用iterrows的写法,修正后的可用版本如下:
all_pairs = {} filtered_result = [] for i, row in df.iterrows(): freq_str = row['Frequency'] item_list = [item.strip() for item in freq_str.split(',')] freq_dict = {} for item in item_list: key, val = item.split(':') freq_dict[key.strip()] = int(val.strip()) # 过滤大于500的键值对 filtered = {k:v for k,v in freq_dict.items() if v>500} filtered_result.append(filtered) all_pairs.update(freq_dict)
内容的提问来源于stack exchange,提问作者Akshay MG
相关产品推荐
相关产品推荐

