python很多时候会从各种来源接收数据,这些数据可以采用不同的格式,例如csv,JSON等,可以转换为python列表或字典等。但是要使用诸如pandas之类的包应用计算或分析,我们需要将此数据转换为一个数据框。在本文中,我们将看到如何将给定的python列表(其元素为嵌套字典)转换为pandas Datframe。
我们首先获取嵌套字典的列表,然后从中提取数据行。然后,我们创建另一个for循环,以将行附加到最初创建为空的新列表中。最后,我们在pandas库中应用DataFrames函数来创建数据框。
import pandas as pd # 给定嵌套字典 list = [ { "Fruit": [{"Price": 15.2, "Quality": "A"}, {"Price": 19, "Quality": "B"}, {"Price": 17.8, "Quality": "C"}, ], "Name": "Orange" }, { "Fruit": [{"Price": 23.2, "Quality": "A"}, {"Price": 28, "Quality": "B"} ], "Name": "Grapes" } ] rows = [] # 获取行 for data in list: data_row = data['Fruit'] n = data['Name'] for row in data_row: row['Name'] = n rows.append(row) # 转换为数据框 df = pd.DataFrame(rows) print(df)
运行上面的代码给我们以下结果-
输出结果
Price Quality Name 0 15.2 A Orange 1 19.0 B Orange 2 17.8 C Orange 3 23.2 A Grapes 4 28.0 B Grapes
我们还可以应用pivot_table函数以所需的方式重新组织数据。
import pandas as pd # 嵌套字典初始化列表 list = [ { "Fruit": [{"Price": 15.2, "Quality": "A"}, {"Price": 19, "Quality": "B"}, {"Price": 17.8, "Quality": "C"}, ], "Name": "Orange" }, { "Fruit": [{"Price": 23.2, "Quality": "A"}, {"Price": 28, "Quality": "B"} ], "Name": "Grapes" } ] #print(list) rows = [] # 追加行 for data in list: data_row = data['Fruit'] n = data['Name'] for row in data_row: row['Name'] = n rows.append(row) # 使用数据框 df = pd.DataFrame(rows) df = df.pivot_table(index='Name', columns=['Quality'], values=['Price']).reset_index() print(df)
运行上面的代码给我们以下结果-
输出结果
Name Price Quality A B C 0 Grapes 23.2 28.0 NaN 1 Orange 15.2 19.0 17.8