我从API端点提取数据。我的回答如下:
b'col1;col2;col3;a1;a2;a3\r\nb1;b2;b3\r\n'
我想将响应格式设置为:
col1 col2 col3
a1 a2 a3
b1 b2 b3
为了使事情进一步复杂化,这是我列表中一个输入的响应。我需要这个循环并重复多个输入。
这是我到目前为止所尝试的:
dict = {}
dict[1] = "input1"
dict[2] = "input2"
base_url = "ex.com/?key=abc&input={}"
df = pandas.read_csv('out.csv', Header = None)
for input in dict:
url1=base_url.format(input)
response1 = requests.get(url1)
现在我知道for循环是不完整的 - 不确定使用哪个函数来附加数据并使其格式正确。我是Python的新手 - 即使你指导我选择正确的研究功能,这也会有所帮助。
答案 0 :(得分:1)
我认为col1;col2;col3;a1;a2;a3
但如果没有,这是一个可能的解决方案
s = b'col1;col2;col3;a1;a2;a3\r\nb1;b2;b3\r\n'.decode('utf-8')
table = []
cols = 3
for i, row in enumerate(s.split()):
data = row.split(';')
# If first line, or data is longer than specified columns
if i == 0 or len(data) > cols:
# Try to take column sized chunks
table.append('\t'.join(data[:cols]))
table.append('\t'.join(data[cols:]))
else:
table.append('\t'.join(data))
print('\n'.join(table))
输出
col1 col2 col3
a1 a2 a3
b1 b2 b3
就字典的循环而言,我只想要值,所以只需循环遍历列表。我对pandas不够熟悉,但您可以继续在循环中向这个table
列表追加行,您可以担心以后获取数据帧或输出到文件。
答案 1 :(得分:0)
考虑StringIO
将文本内容读取到read_table
的数据框,并指定分号分隔符。以下假设响应的换行符落在包含标题的列之间:b'col1;col2;col3\r\na1;a2;a3\r\nb1;b2;b3\r\n'
。此外,每个数据框都附加到列表中,并在末尾连接在一起以形成最终数据帧:
from io import StringIO
import pandas as pd
inputList = ['input1', 'input2']
base_url = "ex.com/?key=abc&input={}"
dfList = []
for input in inputList:
url1 = base_url.format(input)
response1 = requests.get(url1)
temp = pd.read_table(StringIO(response1.decode('utf-8')), sep=';')
dfList.append(temp)
finaldf = pd.concat(dfList)