-1

私のレコード、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 from

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()

アイデア?

4

1 に答える 1

1

オブジェクトが であると言って質問を開始しますOrderedDictが、そうではありません。それはpg.mod.results

それが dict のようなオブジェクトであり、それを csv ファイルに保存したい場合、それを DataFrame に変換する必要はまったくありません。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 ではなく、何らかの不明な理由で、作成者はオブジェクトOrderedDict__str__メソッドでa の表現を返すことにしたため、Result混乱しました。

このhttps://github.com/RavenPack/python-api/blob/e3c99f5eaab7819a2087565ce0859bfb956a45cc/ravenpackapi/models/results.py#L33に基づいて、オブジェクトはその属性Resultに実際のデータを保持するカスタム オブジェクトです。.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)
于 2018-06-29T18:13:52.327 に答える