将python OrderedDict转换为数据帧

将python OrderedDict转换为数据帧,python,dataframe,ordereddict,Python,Dataframe,Ordereddict,我的记录是一个OrderedDict,如下所示: [<ravenpackapi.models.results.Result at 0x118caadd0>, <ravenpackapi.models.results.Result at 0x118caad90>, <ravenpackapi.models.results.Result at 0x118e1a950>, ..., <ravenpackapi.models.results.Result

我的记录是一个
OrderedDict
,如下所示:

[<ravenpackapi.models.results.Result at 0x118caadd0>,
 <ravenpackapi.models.results.Result at 0x118caad90>,
 <ravenpackapi.models.results.Result at 0x118e1a950>,
...,  <ravenpackapi.models.results.Result at 0x118da8750>]
my_record=OrderedDict([(u'FIR_ID','111249'),(u'FIR_TYPE','ORG'))

我需要将其加载到数据库中,因此我希望将数据集转换为数据帧,然后转换为CSV文件,以方便数据库加载。但是,当我键入(我的记录)时,我得到:

<class 'pg.mod.results'>
然后,csv.DictWriter()生成包含以下内容的csv:

<Field: TIMESTAMP_UTC>,<Field: RP_STORY_ID>,<Field: RP_ENTITY_ID>,...,<Field: ENTITY_TYPE>,,,,,,,,,,,,,,,
由于缺少值,我尝试:

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>,...
 {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',...,}
给我

[<Field: TIMESTAMP_UTC>,
 <Field: RP_STORY_ID>,
 <Field: RP_ENTITY_ID>,
 <Field: ENTITY_TYPE>,...
 {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\u 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


想法?

你在开始提问时会说你的对象是一个
有序的ICT
,但事实并非如此。这是一个
pg.mod.results

如果它是一个类似dict的对象,并且希望将其存储到csv文件中,则根本不需要将其转换为数据帧,只需使用python中包含的
csv.DictWriter
类即可:

records = list(records)

with open('myfile.csv', 'w') as f:
    cf = csv.DictWriter(f, records[0].keys()) 
    cf.writeheader()
    cf.writerows(records)
编辑:

在下面的评论中,您揭示了这些对象的真正含义-它们不是OrderedDicts,出于某种未知的原因,作者决定返回
\uuu str\uuuuuu
对象的
方法中的
OrderedDicts
,这就是您感到困惑的原因

基于此,
结果
对象是一个自定义对象,它在其
.data
属性中保存真实数据。然后可以使用该属性进行转换:

with open('myfile.csv', 'w') as f:
    cf = csv.DictWriter(f, 
        ravenpackapi.models.fields.ANALYTICS_FIELDS,
        extrasaction='ignore') 
    cf.writeheader()
    cf.writerows(r.data for r in records)

我想你的反馈会解决我的问题,但还没有。目前,my_记录是这些类似dict的对象的列表。我尝试了您发送给我的代码,但发现错误:“list”对象没有属性“keys”,这与对象不是“dict”类型的事实一致,因此没有键或值。@Y.Eman我将其更改为使用
记录
,这是一个记录列表。它从第一个元素抓取键。在这种情况下你得到了什么?我做了更改,得到了:错误:'Result'对象没有属性'keys'@Y.Eman也许是时候告诉我们这些对象来自哪里了-必须有一种方法来获取要传递给
DictWriter
@Y.Eman ough的键列表!糟糕的做法:在
\uuuu str\uuuuu
中返回不同对象的表示形式,以混淆使用API的程序员。。。唉,好吧。作者应该提供一个
to_dict()
方法或其他东西。
with open('myfile.csv', 'w') as f:
    cf = csv.DictWriter(f, 
        ravenpackapi.models.fields.ANALYTICS_FIELDS,
        extrasaction='ignore') 
    cf.writeheader()
    cf.writerows(r.data for r in records)