💡 参考文章见Ref,感谢提供思路!
🗺️当前这篇博文地址:https://myoontyee.github.io/article/b20a8a22.html
⚠️警告:博客文章禁止一切形式的非授权非法转载!
⚠️Attention: All forms of unauthorized illegal reposts are prohibited !
创建时间 :2022年3月23日10:09:53
最新更新 :2022年3月23日10:28:35
核心思路 :uproot
和uproot3
是两个库,uproot
库好用点,用uproot
库读一下数据,转换成DataFrame
导入库
1 2 3 import uprootimport numpy as npimport pandas as pd
读取.root文件
1 file = uproot.open ('./test.root' )
查看索引
查看索引与你设计的数据存储形式有关
假设的文件结构如下
graph TD
A["test.root"]
B1["B1"]
B2[B2]
B3[B3]
B4[B4]
B5[B5]
C1[C1]
C2[C2]
D1[D1]
D2[D2]
A-->B1
A-->B2
A-->B3
A-->B4
A-->B5
B1-->C1
C1-->D1
B1-->C2
C1-->D2
查看根级索引
1 2 3 4 5 ['B1;1' , 'B2;1' , 'B3;1' , 'B4;1' , 'B5;1' ,]
查看子级索引
查看对应目录下的数据
法1
1 <Array [{Energy: 10}] type ='1 * {"Energy": float64}' >
法2
1 <Array [10] type ='1 * float64' >
批量转换为DataFrame格式
下述代码将根层级下的B2
,B3
,B4
,B5
批量导出转换为DataFrame
形式
1 2 3 4 5 6 df = pd.DataFrame(file.arrays( ['B2;1' , 'B3;1' , 'B4;1' , 'B5;1' ,], library="pd" ))
下述代码将B1
子层级下的C1
,C2
批量导出转换为DataFrame
格式
1 2 3 4 df = pd.DataFrame(file['B1;1' ].arrays( ['C1;1' , 'C2;1' ,], library="pd" ))
整体代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import uprootimport numpy as npimport pandas as pdfile.keys() df = pd.DataFrame() df = pd.DataFrame(file.arrays( ['B2;1' , 'B3;1' , 'B4;1' , 'B5;1' ,], library="pd" )) df.to_csv('./test.csv' )
Ref