import ROOT
from sys import exit
.Define("x", "(int)rdfentry_") \
.Define("y", "1.f/(1.f+rdfentry_)")
npy = df.AsNumpy()
print("Read-out of the full RDataFrame:\n{}\n".format(npy))
df2 = df.Filter("x>5")
npy2 = df2.AsNumpy()
print("Read-out of the filtered RDataFrame:\n{}\n".format(npy2))
npy3 = df2.AsNumpy(columns=["x"])
print("Read-out of the filtered RDataFrame with the columns option:\n{}\n".format(npy3))
npy4 = df2.AsNumpy(exclude=["x"])
print("Read-out of the filtered RDataFrame with the exclude option:\n{}\n".format(npy4))
ROOT.gInterpreter.Declare("""
// Inject the C++ class CustomObject in the C++ runtime.
class CustomObject {
public:
int x = 42;
};
// Create a function that returns such an object. This is called to fill the dataframe.
CustomObject fill_object() { return CustomObject(); }
""")
df3 = df.Define("custom_object", "fill_object()")
npy5 = df3.AsNumpy()
print("Read-out of C++ objects:\n{}\n".format(npy5["custom_object"]))
print("Access to all methods and data members of the C++ object:\nObject: {}\nAccess data member: custom_object.x = {}\n".format(
repr(npy5["custom_object"][0]), npy5["custom_object"][0].x))
try:
import pandas
except:
print("Failed to import pandas.")
exit()
df = pandas.DataFrame(npy5)
print("Content of the ROOT.RDataFrame as pandas.DataFrame:\n{}\n".format(df))
ROOT's RDataFrame offers a high level interface for analyses of data stored in TTrees,...
Read-out of the full RDataFrame:
{'y': ndarray([1. , 0.5 , 0.33333334, 0.25 , 0.2 ,
0.16666667, 0.14285715, 0.125 , 0.11111111, 0.1 ],
dtype=float32), 'x': ndarray([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int32)}
Read-out of the filtered RDataFrame:
{'y': ndarray([0.14285715, 0.125 , 0.11111111, 0.1 ], dtype=float32), 'x': ndarray([6, 7, 8, 9], dtype=int32)}
Read-out of the filtered RDataFrame with the columns option:
{'x': ndarray([6, 7, 8, 9], dtype=int32)}
Read-out of the filtered RDataFrame with the exclude option:
{'y': ndarray([0.14285715, 0.125 , 0.11111111, 0.1 ], dtype=float32)}
Read-out of C++ objects:
[<ROOT.CustomObject object at 0x55a017125ab0>
<ROOT.CustomObject object at 0x55a017125ab4>
<ROOT.CustomObject object at 0x55a017125ab8>
<ROOT.CustomObject object at 0x55a017125abc>
<ROOT.CustomObject object at 0x55a017125ac0>
<ROOT.CustomObject object at 0x55a017125ac4>
<ROOT.CustomObject object at 0x55a017125ac8>
<ROOT.CustomObject object at 0x55a017125acc>
<ROOT.CustomObject object at 0x55a017125ad0>
<ROOT.CustomObject object at 0x55a017125ad4>]
Access to all methods and data members of the C++ object:
Object: <ROOT.CustomObject object at 0x55a017125ab0>
Access data member: custom_object.x = 42
Content of the ROOT.RDataFrame as pandas.DataFrame:
custom_object x y
0 <ROOT.CustomObject object at 0x55a017125ab0> 0 1.000000
1 <ROOT.CustomObject object at 0x55a017125ab4> 1 0.500000
2 <ROOT.CustomObject object at 0x55a017125ab8> 2 0.333333
3 <ROOT.CustomObject object at 0x55a017125abc> 3 0.250000
4 <ROOT.CustomObject object at 0x55a017125ac0> 4 0.200000
5 <ROOT.CustomObject object at 0x55a017125ac4> 5 0.166667
6 <ROOT.CustomObject object at 0x55a017125ac8> 6 0.142857
7 <ROOT.CustomObject object at 0x55a017125acc> 7 0.125000
8 <ROOT.CustomObject object at 0x55a017125ad0> 8 0.111111
9 <ROOT.CustomObject object at 0x55a017125ad4> 9 0.100000