Как конвертировать pandas строк в столбцы - PullRequest
1 голос
/ 13 февраля 2020

У меня есть такой фрейм данных:

0   {\n
1   "Meta Data": {\n
2   "1. Information": "Intraday (5min) ope...
3   "2. Symbol": "SPY",\n
4   "3. Last Refreshed": "2020-02-12 16:00...
5   "4. Interval": "5min",\n
6   "5. Output Size": "Full size",\n
7   "6. Time Zone": "US/Eastern"\n
8   },\n
9   "Time Series (5min)": {\n
10  "2020-02-12 16:00:00": {\n
11  "1. open": "337.6300",\n
12  "2. high": "337.6500",\n
13  "3. low": "337.3800",\n
14  "4. close": "337.4100",\n
15  "5. volume": "2441804"\n
16  },\n
17  "2020-02-12 15:55:00": {\n
18  "1. open": "337.3700",\n
19  "2. high": "337.6500",\n
20  "3. low": "337.3600",\n
21  "4. close": "337.6250",\n
22  "5. volume": "1282631"\n
23  },\n
24  "2020-02-12 15:50:00": {\n
25  "1. open": "337.4050",\n
26  "2. high": "337.4800",\n
27  "3. low": "337.3400",\n
28  "4. close": "337.3600",\n
29  "5. volume": "1078047"\n
30  },\n
31  "2020-02-12 15:45:00": {\n
32  "1. open": "337.3150",\n
33  "2. high": "337.4300",\n
34  "3. low": "337.2900",\n
35  "4. close": "337.4020",\n
36  "5. volume": "434710"\n
37  },\n
......
}\n
}

Я хочу преобразовать вышеуказанные данные в такой формат:

enter image description here

Я знаю, как удалить 1. 2. 3., но понятия не имею, как нацелить эти временные метки "2020-02-12 16:00:00" , потому что они различны в каждой строке и не не имеет фиксированного имени, например "1.open" ... "4.close"

Действительно благодарен за вашу помощь!

1 Ответ

0 голосов
/ 13 февраля 2020

Похоже на данные из Quandl или Alpha Vantage (точно не помню, какой именно, только то, что я действительно ненавидел формат, когда мне приходилось с ним работать).

Предполагая, что вы уже декодировали JSON ответ в словарь под названием data:

time_series = data['Time Series (5min)']
df = pd.DataFrame(time_series.values(), time_series.keys())

# Remove the "1. ", "2. ", etc.
df.columns = df.columns.str.extract('\d+\. (.+)', expand=False)

# Convert the index to timestamp
df.index = pd.to_datetime(df.index)
df.index.name = 'timestamp'

df = df.reset_index()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...