pandas调用to_dict('records')返回列表 无法提取字典值如何解决
问题原因
pandas中DataFrame.to_dict('records')的设计返回值就是由每行对应字典组成的列表,当你使用sample()仅抽取1行时,返回的列表长度为1,字典存储在列表的第一个元素中,所以直接对列表调用.values()方法会报错。
可行解决方法
方法1:直接取出列表内的字典
这是最贴合你现有代码的修改方案,只需要加一个索引取列表第一个元素即可:
sample = random_lets_df.sample() # 索引[0]取出列表中唯一的字典 rand_dict = sample.to_dict('records')[0] # 正常提取值列表 rand_dict_val = list(rand_dict.values())
后续需要匹配键值对时,直接使用rand_dict的键值对应关系即可。
方法2:无需转字典,直接提取值和列名
如果你只是需要值列表和对应的列名配对,不需要中间生成字典,可以更高效的直接提取:
sample = random_lets_df.sample() # 提取随机行的值列表 rand_dict_val = sample.values.tolist()[0] # 提取对应列名(即你需要的键) col_keys = sample.columns.tolist() # 后续需要匹配键值时直接拼接即可 key_value_mapping = dict(zip(col_keys, rand_dict_val))
多随机行场景适配
如果你后续需要一次性抽取多行(比如sample(n=5)),遍历返回的字典列表处理即可:
samples = random_lets_df.sample(n=5) rand_dicts = samples.to_dict('records') # 遍历每行处理 for row_dict in rand_dicts: row_values = list(row_dict.values()) # 传入你的背包优化函数处理
内容的提问来源于stack exchange,提问作者Lucas Anthony
相关产品推荐
相关产品推荐

