如何将多个列表转换为数据帧格式?

时间:2021-06-17 03:48:12

标签: python pandas

我使用 API 提取了一堆数据并将它们 read_csv 转换为 df。数据采用列表格式列表如下:

[["Datestamp","A","B","C","D","E","F"],
["2019-02-25T00:00:00",88,91,90,88,85,88.4],
["2019-02-26T00:00:00",88,91,90,88,85,88.4],
["2019-02-27T00:00:00",87,90,89,87,84,87.4],
["2019-02-28T00:00:00",87,90,89,87,84,87.4],
["2019-03-01T00:00:00",87,90,89,87,84,87.4],
["2019-03-04T00:00:00",87,90,89,87,84,87.4],
["2019-03-05T00:00:00",87,90,89,87,84,87.4],
["2019-03-06T00:00:00",88,91,90,88,85,88.4],...]

第一个列表应该是标题 如何将其更改为以下数据帧格式,其中每个列表是数据帧的一行:

<头>
数据戳 A B C D E F
2019-02-25T00:00:00 88 80 90 84 80 90
2019-02-25T00:00:00 88 80 90 84 80 90
2019-02-25T00:00:00 88 80 90 84 80 90

感谢您的帮助!

在此处发布完整代码:

import requests
import json
import pandas as pd
import io



# Get Authentication token
url = "https://analytics.bmocm.com/auth/login"

payload = json.dumps({
    "username": "<username>",
    "password": "<password>"
})

headers = {
    'Content-Type': "application/json",
    'Cache-Control': "no-cache"
}

response = requests.request("POST", url, data=payload, headers=headers)

# print(response.text)

authData = json.loads(response.text)

token = authData["token"]

# query for historical data
query = {
    "StartDate": "2019-02-24T00:00:00",
    "EndDate": "2020-02-24T00:00:00",
    "SortOrder": "asc",
    "JoinType": "outer",
    "returnHeader": "true",
    "Commands": [
        [1, "CorpSpreads,bmo,5", "true", 1, "A      Senior,5"],
        [2, "CorpSpreads,bns,5", "true", 1, "B       Senior,5"],
        [3, "CorpSpreads,cm,5", "true", 1, "C      Senior,5"],
        [4, "CorpSpreads,ry,5", "true", 1, "D     Senior, 5"],
        [5, "CorpSpreads,td,5", "true", 1, "E         Senior,5"],
        [6, "=(A1+A2+A3+A4+A5)/5", "true", 0, "Average"]
    ]
}

jsonQuery = json.dumps(query)

url = "https://analytics.bmocm.com/sapphire/sapphireQuery"

payload = jsonQuery

headers = {
    'Content-Type': "application/json",
    'Authorization': "Bearer " + token,
    'Cache-Control': "no-cache"
}

# Sapphire query request
response = requests.request("POST", url, data=payload, headers=headers)

#print(response.text)
list = pd.read_csv(io.StringIO(response.text),header=None)

df=pd.DataFrame(list[1:],columns=list[0])

df.head()

1 个答案:

答案 0 :(得分:1)

您可以将列表导入 Panda 的 DataFrame,如下所示:

import pandas as pd

data_list = [
    ["Datestamp", "A", "B", "C", "D", "E", "F"],
    ["2019-02-25T00:00:00", 88, 91, 90, 88, 85, 88.4],
    ["2019-02-26T00:00:00", 88, 91, 90, 88, 85, 88.4],
    ["2019-02-27T00:00:00", 87, 90, 89, 87, 84, 87.4],
    ["2019-02-28T00:00:00", 87, 90, 89, 87, 84, 87.4],
    ["2019-03-01T00:00:00", 87, 90, 89, 87, 84, 87.4],
    ["2019-03-04T00:00:00", 87, 90, 89, 87, 84, 87.4],
    ["2019-03-05T00:00:00", 87, 90, 89, 87, 84, 87.4],
    ["2019-03-06T00:00:00", 88, 91, 90, 88, 85, 88.4],
]

data_df = pd.DataFrame(data_list[1:], columns=data_list[0])
print(data_df.head())
             Datestamp   A   B   C   D   E     F
0  2019-02-25T00:00:00  88  91  90  88  85  88.4
1  2019-02-26T00:00:00  88  91  90  88  85  88.4
2  2019-02-27T00:00:00  87  90  89  87  84  87.4
3  2019-02-28T00:00:00  87  90  89  87  84  87.4
4  2019-03-01T00:00:00  87  90  89  87  84  87.4