Цикл по серии Панд для создания словаря

#python #json #pandas

Вопрос:

Привет, у меня есть серия панд, которую я люблю перебирать, чтобы сгенерировать определенный формат JSON (dic).

Мой код

 strategy = {}
for ticker in buy_tickers:
    item = {"ticker": buy_tickers.index[ticker]}
    for i in buy_tickers:
        values = [{"rebalancedWeight" : buy_tickers[i]}]
    item.append(values)
    strategy.append(item)
 

данные buy_tickers

 AXS      0.1667
FET      0.1667
LUNA     0.1667
POLY     0.1667
QNT      0.1667
STEEM    0.1667
Name: 2021-07-29 00:00:00, dtype: float64
 

стратегия Ожидаемый результат

 {
"ticker": "AXS",
"values": [
{
"rebalancedWeight": 0.1667
}
]},
{
"ticker": "FET",
"values": [
{
"rebalancedWeight": 0.1667
}
]}.....
 

Ошибка

 IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
 

Когда я проверяю buy_tickers.index[0], я получаю «AXS».

Ответ №1:

Вот один из способов:

 import io

data = '''s    val
AXS      0.1667
FET      0.2667
LUNA     0.4
POLY     0.65
QNT      0.22
STEEM    0.11'''
buy_tickers = pd.read_csv(io.StringIO(data), sep=' s ', engine='python')
buy_tickers.set_index('s', inplace=True)

strategy = []
for i, ticker in enumerate(buy_tickers.index.tolist()):
    # print(i, ticker)
    d = {"ticker": ticker, "values": [{"rebalancedWeight" : buy_tickers['val'].loc[buy_tickers.index[i]]}]}
    strategy.append(d)

Output:

[{'ticker': 'AXS', 'values': [{'rebalancedWeight': 0.1667}]},
 {'ticker': 'FET', 'values': [{'rebalancedWeight': 0.2667}]},
 {'ticker': 'LUNA', 'values': [{'rebalancedWeight': 0.4}]},
 {'ticker': 'POLY', 'values': [{'rebalancedWeight': 0.65}]},
 {'ticker': 'QNT', 'values': [{'rebalancedWeight': 0.22}]},
 {'ticker': 'STEEM', 'values': [{'rebalancedWeight': 0.11}]}]
 

Комментарии:

1. Спасибо за ответ! Для чего используется «val» в наборе данных? Нельзя ли это сделать с моей текущей серией Pd?

2. Я использовал s и val в качестве имен индексов и столбцов соответственно. Если ваше имя столбца имеет сбалансированный вес, используйте его вместо val.

3. Круто, спасибо, только одно последнее, что я понял. Формат JSON-dic (окончание {}), в то время как вывод, который вы даете, представляет собой список (я знаю, что в своем коде я создаю пустой список). Похоже, что dic не имеет добавления