Pandas DataFrame转字典失败求助:已参考指南仍无法实现转换
解决Pandas DataFrame转字典的问题
我看到你已经在筛选2015年非NA的供应商数据,并且想把结果转换成字典,但目前返回的还是DataFrame格式。问题的核心是你还没有调用Pandas内置的to_dict()方法来完成转换,下面是具体的解决方案:
关键知识点:Pandas的to_dict()方法
Pandas的DataFrame提供了to_dict()方法,可以灵活地将数据转换成不同结构的字典,常用的orient参数包括:
'index':以行索引为键,每行数据作为值(字典格式),刚好匹配你当前输出的行号对应数据的需求'records':将每行转换成一个字典,所有行组成列表'dict':以列名为键,列值组成的字典为值
修改后的完整代码
结合你的需求(行号从1开始,返回字典格式),修改后的代码如下:
import pandas as pd from collections import OrderedDict # 如果需要严格有序的字典可以导入 # 读取并预处理数据 governmentcsv = pd.read_csv('government-procurement-via-gebiz.csv', parse_dates=True) extract = governmentcsv.loc[:, ['supplier_name','award_date']] extract.award_date = pd.to_datetime(extract.award_date) def extract_supplier_not_na_2015(): notNAFifteen = extract[(extract.supplier_name != 'na') & (extract.award_date.dt.year == 2015)] notNAFifteen.reset_index(drop=True, inplace=True) notNAFifteen.index += 1 # 索引从1开始 # 可选:将日期转换为字符串格式(避免字典里出现Timestamp对象) notNAFifteen['award_date'] = notNAFifteen['award_date'].dt.strftime('%Y-%m-%d') # 转换为字典,orient='index'对应行号为键 result_dict = notNAFifteen.to_dict(orient='index') # 如果需要OrderedDict(保持顺序),可以替换上面一行: # result_dict = OrderedDict(notNAFifteen.to_dict(orient='index')) return result_dict # Python 3 请用括号包裹print内容 print(extract_supplier_not_na_2015())
输出示例
运行后你会得到类似这样的字典结构:
{ 1: {'supplier_name': 'RMA CONTRACTS PTE. LTD.', 'award_date': '2015-01-28'}, 2: {'supplier_name': 'TESCOM (SINGAPORE) SOFTWARE SYSTEMS TESTING PT...', 'award_date': '2015-07-01'}, 3: {'supplier_name': 'MKS GLOBAL PTE. LTD.', 'award_date': '2015-04-24'}, ... }
额外提示
- 你之前注释的
collections.orderedDictionary存在拼写错误,正确的是collections.OrderedDict,不过在Pandas 1.1.0及以上版本,DataFrame默认保持插入顺序,直接用to_dict()就能得到有序的字典,除非你需要明确的OrderedDict对象 - 如果使用Python 3,
print语句需要加上括号,这是语法要求
内容的提问来源于stack exchange,提问作者John Wick
相关产品推荐
相关产品推荐

