Python 循环中的多个数据帧

Python 循环中的多个数据帧,python,pandas,loops,dataframe,Python,Pandas,Loops,Dataframe,我可以在循环中创建多个数据帧吗 我有一长串网络垃圾信息,但我想把它们转换成多个数据帧。不确定这是否可能 下面是我的原始Web垃圾代码: indicator = {'SI.POV.GINI?date=2000:2020','SL.UEM.TOTL.ZS?date=2000:2020','NE.IMP.GNFS.ZS?date=2000:2020','NE.EXP.GNFS.ZS?date=2000:2020'} url_list = [] for i in indicator: url

我可以在循环中创建多个数据帧吗

我有一长串网络垃圾信息,但我想把它们转换成多个数据帧。不确定这是否可能

下面是我的原始Web垃圾代码:

indicator =  {'SI.POV.GINI?date=2000:2020','SL.UEM.TOTL.ZS?date=2000:2020','NE.IMP.GNFS.ZS?date=2000:2020','NE.EXP.GNFS.ZS?date=2000:2020'}

url_list = []
for i in indicator:
    url = "http://api.worldbank.org/v2/countries/all/indicators/%s&format=json&per_page=5000" % i
    url_list.append(url)

result_list = []
for i in url_list:
    response = requests.get(i)
    print(response)
    result_list.append(response.content)

result_json = []
for i in range(len(result_list)):
    result_json.append(json.loads(result_list[i]))

result_json
如果没有,我也选择手动操作,但我得到了一个错误

gini_df = pd.DataFrame.from_dict(result_json[0])
gini_df
AttributeError:“列表”对象没有属性“键”


在循环中创建多个数据帧非常简单,您可以将数据帧附加到列表中,或者将它们存储在特定键下的字典中。下面是一些示例代码:

import numpy as np
import pandas as pd

df_list = []
for i in range(10):
    df = pd.DataFrame(np.random.rand(3,3), columns=['a', 'b', 'c'])
    df_list.append(df)

print(df_list[5])

a         b         c
0  0.361910  0.521254  0.763633
1  0.030419  0.098978  0.929679
2  0.304616  0.563361  0.326490
对于您的任务,问题是解析层次数据结构并将其扁平化为熊猫可以理解的格式。例如:

indicator = {'SI.POV.GINI?date=2000:2020'}
url_list = []
for i in indicator:
    url = "http://api.worldbank.org/v2/countries/all/indicators/%s&format=json&per_page=5000" % i
    url_list.append(url)

result_list = []
for i in url_list:
    response = requests.get(i)
    print(response)
    result_list.append(response.content)

result_json = []
for i in range(len(result_list)):
    result_json.append(json.loads(result_list[i]))

columns = ['indicator_id', 'indicator_value','country_id', 'country_value','countryiso3code', 'date', 'value', 'unit', 'obs_status', 'decimal']
data = {}
for i in columns:
    data[i] = []

for i in result_json:
    for record in i[1]:
        for k in columns:
            try:
                key = k.split('_')
                val = record[key[0]]
                if type(val) == dict:
                    data[k].append(val[key[1]])
                else:
                    data[k].append(val)
            except:
                data[k].append('')
df = pandas.DataFrame(data)
print(df)

请注意,我的示例代码只在一个指示符上运行。如果要循环每个指示符,可以像我在上面的示例中所做的那样将最终的df附加到列表中。

在循环中创建多个数据帧很简单,您可以将数据帧附加到列表中,或者将它们存储在特定键下的字典中。下面是一些示例代码:

import numpy as np
import pandas as pd

df_list = []
for i in range(10):
    df = pd.DataFrame(np.random.rand(3,3), columns=['a', 'b', 'c'])
    df_list.append(df)

print(df_list[5])

a         b         c
0  0.361910  0.521254  0.763633
1  0.030419  0.098978  0.929679
2  0.304616  0.563361  0.326490
对于您的任务,问题是解析层次数据结构并将其扁平化为熊猫可以理解的格式。例如:

indicator = {'SI.POV.GINI?date=2000:2020'}
url_list = []
for i in indicator:
    url = "http://api.worldbank.org/v2/countries/all/indicators/%s&format=json&per_page=5000" % i
    url_list.append(url)

result_list = []
for i in url_list:
    response = requests.get(i)
    print(response)
    result_list.append(response.content)

result_json = []
for i in range(len(result_list)):
    result_json.append(json.loads(result_list[i]))

columns = ['indicator_id', 'indicator_value','country_id', 'country_value','countryiso3code', 'date', 'value', 'unit', 'obs_status', 'decimal']
data = {}
for i in columns:
    data[i] = []

for i in result_json:
    for record in i[1]:
        for k in columns:
            try:
                key = k.split('_')
                val = record[key[0]]
                if type(val) == dict:
                    data[k].append(val[key[1]])
                else:
                    data[k].append(val)
            except:
                data[k].append('')
df = pandas.DataFrame(data)
print(df)

请注意,我的示例代码只在一个指示符上运行。如果您想循环每个指标,您可以像我在上面的示例中所做的那样将最终的df附加到列表中。

谢谢!我刚刚编辑了我的问题。你的评论仍然适用吗?你的错误与你的问题无关。你得到了一个错误,因为json数据的格式不是to_dict方法可以理解的格式。是的,实际上我也对这个错误感到震惊,因为当我为每个指标运行模型时,它工作得很好。即使格式是列表,json输出也已转换为数据帧。我尝试了gini_df=pd.DataFrame(result_json[0]),但结果是“list”对象没有属性“keys”,谢谢!我刚刚编辑了我的问题。你的评论仍然适用吗?你的错误与你的问题无关。你得到了一个错误,因为json数据的格式不是to_dict方法可以理解的格式。是的,实际上我也对这个错误感到震惊,因为当我为每个指标运行模型时,它工作得很好。即使格式是列表,json输出也被转换为数据帧。我尝试了gini_df=pd.DataFrame(result_json[0]),但结果是“list”对象没有属性“keys”