Сохранение объекта OrderedDict в файл csv - PullRequest
1 голос
/ 14 июля 2020

У меня есть следующий объект, который является OrderedDict, который я хотел бы экспортировать в csv.

OrderedDict([('AGG', 0.09888),
             ('BWX', 0.04886),
             ('DBC', 0.06046),
             ('EMB', 0.05899),
             ('HYG', 0.07954),
             ('IEF', 0.09933),
             ('LQD', 0.07909),
             ('MBB', 0.10442),
             ('MUB', 0.09408),
             ('PCY', 0.05172),
             ('RING', 0.0026),
             ('SHM', 0.03761),
             ('SHY', 0.11148),
             ('SPY', 0.07296)])

Я использую команду .to_csv, но в сообщении об ошибке написано: «'collections.OrderedDict' объект не имеет атрибута 'to_csv' "

Нужно ли мне преобразовать его в массив df или np?

Спасибо

Ответы [ 3 ]

1 голос
/ 14 июля 2020

Используйте pandas вместо

d = OrderedDict([('AGG', 0.09888),
             ('BWX', 0.04886),
             ('DBC', 0.06046),
             ('EMB', 0.05899),
             ('HYG', 0.07954),
             ('IEF', 0.09933),
             ('LQD', 0.07909),
             ('MBB', 0.10442),
             ('MUB', 0.09408),
             ('PCY', 0.05172),
             ('RING', 0.0026),
             ('SHM', 0.03761),
             ('SHY', 0.11148),
             ('SPY', 0.07296)])
pd.DataFrame.from_dict(d, orient="index").to_csv("data.csv")
0 голосов
/ 14 июля 2020

Решение

Мой первый выбор будет использовать pandas из-за его простоты с точки зрения пользовательской реализации.

import pandas as pd
pd.DataFrame(d.items()).to_csv('test.csv', index=False)

Альтернативное решение

Однако , если по какой-то причине вы НЕ хотите использовать pandas, вы можете использовать следующую реализацию.

Примечание : I Я использую OrderedDict (d) из раздела фиктивных данных ниже.

Создать файл CSV: test.csv

# Create lines
CSV_FILENAME = 'test.csv'
lines = [','.join(list(map(str,items))) for items in d.items()]
# Create csv file
with open(CSV_FILENAME, 'w') as f:
    f.write('\n'.join(lines))

Проверить файл-вывод в формате test.csv

# Check if csv file was properly created    
with open(CSV_FILENAME, 'r') as f:
    s = f.read()

print(s)

Вывод

# test.csv

AGG,0.09888
BWX,0.04886
DBC,0.06046
EMB,0.05899
HYG,0.07954
IEF,0.09933
LQD,0.07909
MBB,0.10442
MUB,0.09408
PCY,0.05172
RING,0.0026
SHM,0.03761
SHY,0.11148
SPY,0.07296

фиктивных данных

from collections import OrderedDict

d = OrderedDict([('AGG', 0.09888),
             ('BWX', 0.04886),
             ('DBC', 0.06046),
             ('EMB', 0.05899),
             ('HYG', 0.07954),
             ('IEF', 0.09933),
             ('LQD', 0.07909),
             ('MBB', 0.10442),
             ('MUB', 0.09408),
             ('PCY', 0.05172),
             ('RING', 0.0026),
             ('SHM', 0.03761),
             ('SHY', 0.11148),
             ('SPY', 0.07296)])
0 голосов
/ 14 июля 2020

Вы можете просто написать файл CSV вручную:

with open('output.csv', 'w') as f:
    for key,val in odict.items():
        f.write('{},{}\n'.format(key, val))
...