【发布时间】:2018-12-08 23:25:56
【问题描述】:
我的记录,OrderedDict,如下所示:
my_record = OrderedDict([ (u'FIR_ID', '111249'), (u'FIR_TYPE', 'ORG')])
我需要将其加载到数据库中,因此我想将数据集转换为数据框,然后转换为 CSV 文件,以方便加载数据库。但是,当我执行type(my_record) 时,我得到:
<class 'pg.mod.results'>
这意味着它是一个类对象。如果它是collections.OrderedDict 类型,我可以做一个DataFrame(my_record)。我正在使用 Python 2.x。我可以将这个OrderedDict 转换为DataFrame 什么?
编辑
感谢 nosklo 的代码,错误消失了;列标题在那里,但缺少值。我提取了 10 条记录,如下所示:
[<ravenpackapi.models.results.Result at 0x118caadd0>,
<ravenpackapi.models.results.Result at 0x118caad90>,
<ravenpackapi.models.results.Result at 0x118e1a950>,
..., <ravenpackapi.models.results.Result at 0x118da8750>]
然后,csv.DictWriter() 生成一个包含以下内容的 csv:
<Field: TIMESTAMP_UTC>,<Field: RP_STORY_ID>,<Field: RP_ENTITY_ID>,...,<Field: ENTITY_TYPE>,,,,,,,,,,,,,,,
这看起来像完整的键列表。并且文件末尾有很多行 ',,,,' 表示缺少值。
更新
我当前的代码是这样的:
records = list(records)
with open('/Users/.../.../RP_test_5.txt', 'w') as f:
cf = csv.DictWriter(f,
ravenpackapi.models.fields.ANALYTICS_FIELDS,
extrasaction='ignore')
cf.writeheader()
cf.writerows(r.data for r in records)
由于缺少值,我尝试了:
for r in records: r.data
它成功地给了我我需要的字典。所以我不明白为什么,我不能向我的 csv 写入任何值。会不会是这样的
ravenpackapi.models.fields.ANALYTICS_FIELDS
给我
[<Field: TIMESTAMP_UTC>,
<Field: RP_STORY_ID>,
<Field: RP_ENTITY_ID>,
<Field: ENTITY_TYPE>,...
而 r.data 来自
for r in records: r.data
给我
{u'RP_ENTITY_ID': u'91C82E',
u'RP_POSITION_ID': None,
u'RP_SOURCE_ID': u'C98333',
u'RP_STORY_EVENT_COUNT': 17,
u'RP_STORY_EVENT_INDEX': 5,
u'RP_STORY_ID': u'54F16F66850FB15F838629FD0C41F1CD',
u'SOURCE_NAME': u'Ticker Report',
u'SUB_TYPE': None,
u'TIMESTAMP_UTC': u'2018-06-30 00:03:10.457',...,}
它们的顺序不同,和/或键的格式不同?
u'TIMESTAMP_UTC' 与 <Field: TIMESTAMP_UTC>
成功了
records = list(records)
for r in records: r.data
with open('/Users/.../RP_test_6.txt', 'w') as f:
cf = csv.DictWriter(f,
r.data.keys(),
extrasaction='ignore')
cf.writeheader()
cf.writerows(r.data for r in records)
我相信有比这更好的方法
for r in records: r.data
和
r.data.keys()
想法?
【问题讨论】:
标签: python dataframe ordereddict