Моя запись, 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()
Идеи