Skip to main content
 首页 » 编程设计

python之从字典列表创建 Pandas 数据框,字典键作为列

2025年05月04日22lori

不确定标题是否足够解释。

我有一个字典列表,我想从中创建一个数据框。为简单起见,列表是:

list=[] 
 
DIC1={'value': 69.0, 'time': 10, 'from': 'Mexico', 'signal_name': 'Part1'} 
DIC2={'value': 65.0, 'time': 10, 'from': 'Mexico', 'signal_name': 'Part2'} 
DIC3={'value': 60.0, 'time': 11, 'from': 'Mexico', 'signal_name': 'Part1'} 
DIC4={'value': 67.0, 'time': 10, 'from': 'Mexico', 'signal_name': 'Part3'} 
DIC5={'value': 69.0, 'time': 11, 'from': 'Mexico', 'signal_name': 'Part2'} 
DIC6={'value': 70.0, 'time': 12, 'from': 'Mexico', 'signal_name': 'Part1'} 
DIC7={'value': 68.0, 'time': 12, 'from': 'Mexico', 'signal_name': 'Part2'} 
DIC8={'value': 71.0, 'time': 11, 'from': 'Mexico', 'signal_name': 'Part3'} 
DIC9={'value': 50.0, 'time': 12, 'from': 'Mexico', 'signal_name': 'Part3'} 
 
list=[DIC1,DIC2,DIC3,DIC4,DIC5,DIC6,DIC7,DIC8,DIC9] 
#Convert to Dataframe 
df=pd.DataFrame(list)  

如果我像上面的例子一样简单地将字典列表转换为数据框,我会得到一个像这样的数据框:

    from    signal_name time    value 
0   Mexico  Part1       10      69.0 
1   Mexico  Part2       10      65.0 
2   Mexico  Part1       11      60.0 
3   Mexico  Part3       10      67.0 
4   Mexico  Part2       11      69.0 
5   Mexico  Part1       12      70.0 
6   Mexico  Part2       12      68.0 
7   Mexico  Part3       11      71.0 
8   Mexico  Part3       12      50.0 

但我正在尝试获取过滤表,我猜是一种数据透视表?像这样的东西:

    time    from    part1(value)    part2(value)    part3(value) 
0   10      Mexico      69.0            65.0            67.0 
1   11      Mexico      60.0            69.0            71.0 
2   12      Mexico      70.0            68.0            50.0 

这可能吗?

请您参考如下方法:

借助数据透视表

df.pivot_table(index=['from','time'],columns=['signal_name'],values=['value']).reset_index() 

输出:

               from time value             
signal_name              Part1 Part2 Part3 
0            Mexico   10  69.0  65.0  67.0 
1            Mexico   11  60.0  69.0  71.0 
2            Mexico   12  70.0  68.0  50.0 

If you dont want value as separate header then pass values parameter as a string i.e

df.pivot_table(index=['from','time'],columns=['signal_name'],values='value').reset_index() 
signal_name    from  time  Part1  Part2  Part3 
0            Mexico    10   69.0   65.0   67.0 
1            Mexico    11   60.0   69.0   71.0 
2            Mexico    12   70.0   68.0   50.0