#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 не имеет добавления