忍受我,因为我是python的新手.我正在迭代数据并获得我需要组合成一个pandas数据帧的多个列表.
问题是每个项目都被视为一个单独的实体.请帮忙
for r in rows:
person_info = list()
person_info.append(r['Metadata']['name'])
person_info.append(r['Metadata']['CountryId'])
person_info.append(r['Metadata']['StateId'])
person_info.append(r['Metadata']['Income'])
print(person_info)
这是输出:
['mike' , 1, 4, 20000]
['mary', 2, 5, 30000]
['jane', 3, 6, 40000]
这是所需的输出作为数据框,标题为“name”,“id_a”,“id_b”和“income”:
name id_a id_b income
mike 1 4 20000
mary 2 5 30000
jane 3 6 40000
解决方法:
您可以在循环外创建变量person_info并在每次迭代中追加元组:
person_info = list()
for r in rows:
person_info.append((r['Metadata']['name'], r['Metadata']['CountryId'], r['Metadata']['StateId'], r['Metadata']['Income']))
列表理解的解决方案:
person_info = [(r['Metadata']['name'], r['Metadata']['CountryId'], r['Metadata']['StateId'], r['Metadata']['Income']) for r in rows]
df = pd.DataFrame(person_info, columns=["name", "id_a", "id_b", "income"])
如果输入是json,另一种可能的解决方案是使用json_normalize
:
import json
from pandas.io.json import json_normalize
with open('myJson.json') as data_file:
data = json.load(data_file)
df = json_normalize(data, 'Metadata')