Python 将数据从api保存到数据帧
从API获取数据时,我有以下输出:Python 将数据从api保存到数据帧,python,json,api,Python,Json,Api,从API获取数据时,我有以下输出: {'Textbook': [{'Type': 'Chapters', 'Case': 'Ch09', 'Rates': [{'Date': '2021- 04-23T00:00:00', 'Rate': 10.0}, {'Date': '2021-04-26T00:00:00', 'Rate': 10.0}, {'Date': '2021-04-27T00:00:00', 'Rate': 10.5}, {'Date': '2021-04-28T00:00:
{'Textbook': [{'Type': 'Chapters', 'Case': 'Ch09', 'Rates':
[{'Date': '2021- 04-23T00:00:00', 'Rate': 10.0}, {'Date': '2021-04-26T00:00:00', 'Rate': 10.0},
{'Date': '2021-04-27T00:00:00', 'Rate': 10.5}, {'Date': '2021-04-28T00:00:00', 'Rate': 10.5},
{'Date': '2021-04-29T00:00:00', 'Rate': 10.5}, {'Date': '2021-04-30T00:00:00', 'Rate': 10.0}]}]}
我试图在数据帧中获得以下输出:
Date Rate
2021- 04-23T00:00:00 10.0
2021-04-26T00:00:00 10.0
2021-04-27T00:00:00 10.5
等
我尝试了以下代码:
l=parsed ###this is the output from API
df=pd.DataFrame()
for i in l:
d1 = {}
reportDate = []
price = []
for j in i['Chapters']:
reportDate.append(j['Date'])
price.append(j['Rate'])
d1['Date'] = reportDate
d1['Rate'] = price
df = df.append(pd.DataFrame(d1))
df['Date'] = pd.to_datetime(df['Date'])
但是,我得到了以下错误:字符串索引必须是I['Chapters']中j的行的整数:
您可以尝试以下方法:
d = {'Textbook': [{'Type': 'Chapters', 'Case': 'Ch09', 'Rates':
[{'Date': '2021- 04-23T00:00:00', 'Rate': 10.0}, {'Date': '2021-04-26T00:00:00', 'Rate': 10.0},
{'Date': '2021-04-27T00:00:00', 'Rate': 10.5}, {'Date': '2021-04-28T00:00:00', 'Rate': 10.5},
{'Date': '2021-04-29T00:00:00', 'Rate': 10.5}, {'Date': '2021-04-30T00:00:00', 'Rate': 10.0}]}]}
pd.DataFrame(d.get('Textbook')[0].get('Rates'))
# Date Rate
# 0 2021- 04-23T00:00:00 10.0
# 1 2021-04-26T00:00:00 10.0
# 2 2021-04-27T00:00:00 10.5
# 3 2021-04-28T00:00:00 10.5
# 4 2021-04-29T00:00:00 10.5
# 5 2021-04-30T00:00:00 10.0
你问题的可能解决方案
您可以在此处阅读文档:
或您可以尝试此代码
d={'tupbook':[{'Type':'Chapters','Case':'Ch09','Rates':
[{'Date':'2021-04-23T00:00:00','Rate':10.0},{'Date':'2021-04-26T00:00:00','Rate':10.0},
{'Date':'2021-04-27T00:00:00','Rate':10.5},{'Date':'2021-04-28500:00:00','Rate':10.5},
{'Date':'2021-04-29T00:00:00','Rate':10.5},{'Date':'2021-04-30T00:00:00','Rate':10.0}
pd.DataFrame(d.get('textute')[0]。get('Rates'))
代码不起作用?请在下面发表评论。。任何其他问题,我都很乐意回答。下面的代码修复将解决您的问题。虽然安德烈亚斯的答案是一种蟒蛇式的方式
import ast
# Data setup
raw_data="""
{'Textbook': [{'Type': 'Chapters', 'Case': 'Ch09', 'Rates':
[{'Date': '2021- 04-23T00:00:00', 'Rate': 10.0}, {'Date': '2021-04-26T00:00:00', 'Rate': 10.0},
{'Date': '2021-04-27T00:00:00', 'Rate': 10.5}, {'Date': '2021-04-28T00:00:00', 'Rate': 10.5},
{'Date': '2021-04-29T00:00:00', 'Rate': 10.5}, {'Date': '2021-04-30T00:00:00', 'Rate': 10.0}]}]}
"""
val=ast.literal_eval(raw_data) # eval to dictionary
解决方案是(请查看评论部分)
您的代码每次都会重置<例如,代码>价格
在尝试将其分配给列之前会被多次覆盖
l=val ###this is the output from API, added val in this example
reportDate = [] # moved out of loop to collect the data
price = [] # moved out of loop to collect the data
#df=pd.DataFrame() build the dataframe once all the data is ready
for i in l: # this is dictionary
#d1 = {} not needed
for j in l[i][0]['Rates']:
reportDate.append(j['Date'])
price.append(j['Rate'])
#d1['Date'] = reportDate
#d1['Rate'] = price
#df = df.append(pd.DataFrame(d1))
#df['Date'] = pd.to_datetime(df['Date'])
df=pd.DataFrame({'Date':reportDate,"Rate":price})