Workflow for a district optimization¶
In this application of the ETHOS.FINE framework, a small district is modeled and optimized.
All classes which are available to the user are utilized and examples of the selection of different parameters within these classes are given.
The workflow is structures as follows:
- Required packages are imported and the input data path is set
- An energy system model instance is created
- Commodity sources are added to the energy system model
- Commodity conversion components are added to the energy system model
- Commodity storages are added to the energy system model
- Commodity transmission components are added to the energy system model
- Commodity sinks are added to the energy system model
- The energy system model is optimized
- Selected optimization results are presented
1. Import required packages and set input data path¶
The ETHOS.FINE framework is imported which provides the required classes and functions for modeling the energy system.
import fine as fn
from getData import getData
data = getData()
%load_ext autoreload
%autoreload 2
%matplotlib inline
2. Create an energy system model instance¶
The structure of the energy system model is given by the considered locations, commodities, the number of time steps as well as the hours per time step.
The commodities are specified by a unit (i.e. 'GW_electric', 'GW_H2lowerHeatingValue', 'Mio. t CO2/h') which can be given as an energy or mass unit per hour. Furthermore, the cost unit and length unit are specified.
locations = data["locations"]
commodityUnitDict = {"electricity": "kW_el", "methane": "kW_CH4_LHV", "heat": "kW_th"}
commodities = {"electricity", "methane", "heat"}
numberOfTimeSteps = 8760
hoursPerTimeStep = 1
The modeled locations include 6 buildings (bd1 to bd6), which are connected to different grids (grid1 to grid7), and the location of the transformer.
locations
{'bd1',
'bd2',
'bd3',
'bd4',
'bd5',
'bd6',
'grid1',
'grid2',
'grid3',
'grid4',
'grid5',
'grid6',
'grid7',
'transformer'}
esM = fn.EnergySystemModel(
locations=locations,
commodities=commodities,
numberOfTimeSteps=8760,
commodityUnitsDict=commodityUnitDict,
hoursPerTimeStep=1,
costUnit="€",
lengthUnit="m",
verboseLogLevel=2,
)
3. Add commodity sources to the energy system model¶
Electricity Purchase¶
esM.add(
fn.Source(
esM=esM,
name="Electricity purchase",
commodity="electricity",
hasCapacityVariable=False,
operationRateMax=data["El Purchase, operationRateMax"],
commodityCost=0.298,
)
)
Natural Gas Purchase¶
esM.add(
fn.Source(
esM=esM,
name="NaturalGas purchase",
commodity="methane",
hasCapacityVariable=False,
operationRateMax=data["NG Purchase, operationRateMax"],
commodityCost=0.065,
)
)
PV¶
esM.add(
fn.Source(
esM=esM,
name="PV",
commodity="electricity",
hasCapacityVariable=True,
hasIsBuiltBinaryVariable=True,
operationRateMax=data["PV, operationRateMax"],
capacityMax=data["PV, capacityMax"],
interestRate=0.04,
economicLifetime=20,
investIfBuilt=1000,
investPerCapacity=1400,
opexIfBuilt=10,
bigM=40,
)
)
4. Add conversion components to the energy system model¶
Boiler¶
esM.add(
fn.Conversion(
esM=esM,
name="Boiler",
physicalUnit="kW_th",
commodityConversionFactors={"methane": -1.1, "heat": 1},
hasIsBuiltBinaryVariable=True,
hasCapacityVariable=True,
interestRate=0.04,
economicLifetime=20,
investIfBuilt=2800,
investPerCapacity=100,
opexIfBuilt=24,
bigM=200,
)
)
5. Add commodity storages to the energy system model¶
Thermal Storage¶
esM.add(
fn.Storage(
esM=esM,
name="Thermal Storage",
commodity="heat",
selfDischarge=0.001,
hasIsBuiltBinaryVariable=True,
capacityMax=data["TS, capacityMax"],
interestRate=0.04,
economicLifetime=25,
investIfBuilt=23,
investPerCapacity=24,
bigM=250,
)
)
Battery Storage¶
esM.add(
fn.Storage(
esM=esM,
name="Battery Storage",
commodity="electricity",
cyclicLifetime=10000,
chargeEfficiency=0.95,
dischargeEfficiency=0.95,
chargeRate=0.5,
dischargeRate=0.5,
hasIsBuiltBinaryVariable=True,
capacityMax=data["BS, capacityMax"],
interestRate=0.04,
economicLifetime=12,
investIfBuilt=2000,
investPerCapacity=700,
bigM=110,
)
)
6. Add commodity transmission components to the energy system model¶
Cable Electricty¶
esM.add(
fn.Transmission(
esM=esM,
name="E_Distribution_Grid",
commodity="electricity",
losses=0.00001,
distances=data["cables, distances"],
capacityFix=data["cables, capacityFix"],
)
)
Natural Gas Pipeline¶
esM.add(
fn.Transmission(
esM=esM,
name="NG_Distribution_Grid",
commodity="methane",
distances=data["NG, distances"],
capacityFix=data["NG, capacityFix"],
)
)
esM.add(
fn.Sink(
esM=esM,
name="Electricity demand",
commodity="electricity",
hasCapacityVariable=False,
operationRateFix=data["Electricity demand, operationRateFix"],
)
)
Heat Demand¶
esM.add(
fn.Sink(
esM=esM,
name="BuildingsHeat",
commodity="heat",
hasCapacityVariable=False,
operationRateFix=data["Heat demand, operationRateFix"],
)
)
8. Optimize energy system model¶
All components are now added to the model and the model can be optimized. If the computational complexity of the optimization should be reduced, the time series data of the specified components can be clustered before the optimization and the parameter timeSeriesAggregation is set to True in the optimize call.
esM.aggregateTemporally(numberOfTypicalPeriods=7)
# esM.optimize(timeSeriesAggregation=True, optimizationSpecs='cuts=0 method=2')
esM.optimize(
timeSeriesAggregation=True, solver=fn.utils.ImplementedSolvers.STANDARD_SOLVER.value
)
GLPSOL--GLPK LP/MIP Solver 5.0
Parameter(s) specified in the command line:
--write C:\Users\T58C8~1.GRO\AppData\Local\Temp\tmp43bqanym.glpk.raw --wglp
C:\Users\T58C8~1.GRO\AppData\Local\Temp\tmp3oq8qsv1.glpk.glp --cpxlp C:\Users\T58C8~1.GRO\AppData\Local\Temp\tmpkcuvn3tw.pyomo.lp
Reading problem data from 'C:\Users\T58C8~1.GRO\AppData\Local\Temp\tmpkcuvn3tw.pyomo.lp'...
C:\Users\T58C8~1.GRO\AppData\Local\Temp\tmpkcuvn3tw.pyomo.lp:201320: warning: lower bound of variable 'x8' redefined
C:\Users\T58C8~1.GRO\AppData\Local\Temp\tmpkcuvn3tw.pyomo.lp:201320: warning: upper bound of variable 'x8' redefined
32542 rows, 15260 columns, 88192 non-zeros
32 integer variables, all of which are binary
201352 lines were read
Writing problem data to 'C:\Users\T58C8~1.GRO\AppData\Local\Temp\tmp3oq8qsv1.glpk.glp'...
170387 lines were written
GLPK Integer Optimizer 5.0
32542 rows, 15260 columns, 88192 non-zeros
32 integer variables, all of which are binary
Preprocessing...
30488 rows, 12838 columns, 78508 non-zeros
32 integer variables, all of which are binary
Scaling...
A: min|aij| = 4.128e-03 max|aij| = 8.333e+02 ratio = 2.019e+05
GM: min|aij| = 3.663e-01 max|aij| = 2.730e+00 ratio = 7.454e+00
EQ: min|aij| = 1.342e-01 max|aij| = 1.000e+00 ratio = 7.454e+00
2N: min|aij| = 1.113e-01 max|aij| = 1.500e+00 ratio = 1.347e+01
Constructing initial basis...
Size of triangular part is 25424
Solving LP relaxation...
GLPK Simplex Optimizer 5.0
30488 rows, 12838 columns, 78508 non-zeros
0: obj = -1.925690861e+03 inf = 2.383e+10 (10343)
Perturbing LP to avoid stalling [1001]...
8212: obj = 1.902965375e+05 inf = 4.336e-06 (0) 72
Removing LP perturbation [10910]...
* 10910: obj = 1.321555860e+05 inf = 5.083e-09 (0) 23
OPTIMAL LP SOLUTION FOUND
Integer optimization begins...
Long-step dual simplex will be used
+ 10910: mip = not found yet >= -inf (1; 0)
+ 11844: >>>>> 1.332570326e+05 >= 1.327597180e+05 0.4% (18; 5)
+ 14302: >>>>> 1.332507742e+05 >= 1.328801486e+05 0.3% (57; 11)
+ 15103: >>>>> 1.332487877e+05 >= 1.328810415e+05 0.3% (65; 15)
+ 16659: >>>>> 1.332383678e+05 >= 1.329290858e+05 0.2% (79; 19)
+ 16680: >>>>> 1.329371437e+05 >= 1.329295671e+05 < 0.1% (77; 28)
+ 16725: mip = 1.329371437e+05 >= tree is empty 0.0% (0; 199)
INTEGER OPTIMAL SOLUTION FOUND
Time used: 11.3 secs
Memory used: 44.7 Mb (46916100 bytes)
Writing MIP solution to 'C:\Users\T58C8~1.GRO\AppData\Local\Temp\tmp43bqanym.glpk.raw'...
47811 lines were written
9. Selected results output¶
Sources and Sink¶
esM.getOptimizationSummary("SourceSinkModel", outputLevel=2)
| bd1 | bd2 | bd3 | bd4 | bd5 | bd6 | grid1 | grid2 | grid3 | grid4 | grid5 | grid6 | grid7 | transformer | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Component | Property | Unit | ||||||||||||||
| BuildingsHeat | operation | [kW_th*h/a] | 213008.3393 | 211961.37319 | 212160.201606 | 212865.469106 | 212987.945931 | 213360.620262 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| [kW_th*h] | 213008.3393 | 211961.37319 | 212160.201606 | 212865.469106 | 212987.945931 | 213360.620262 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ||
| Electricity demand | operation | [kW_el*h/a] | 24718.958697 | 19409.339737 | 24892.818629 | 17439.830164 | 23310.014158 | 19718.252364 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| [kW_el*h] | 24718.958697 | 19409.339737 | 24892.818629 | 17439.830164 | 23310.014158 | 19718.252364 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ||
| Electricity purchase | NPVcontribution | [€] | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 30842.495427 |
| TAC | [€/a] | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 30842.495427 | |
| commodCosts | [€/a] | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 30842.495427 | |
| operation | [kW_el*h/a] | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 103498.306802 | |
| [kW_el*h] | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 103498.306802 | ||
| NaturalGas purchase | NPVcontribution | [€] | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 91270.980537 |
| TAC | [€/a] | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 91270.980537 | |
| commodCosts | [€/a] | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 91270.980537 | |
| operation | [kW_CH4_LHV*h/a] | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 1404168.931345 | |
| [kW_CH4_LHV*h] | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 1404168.931345 | ||
| PV | NPVcontribution | [€] | 1926.398664 | 0.0 | 1863.363974 | 0.0 | 0.0 | 0.0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| TAC | [€/a] | 1916.398664 | 0.0 | 1853.363974 | 0.0 | 0.0 | 0.0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
| capacity | [kW_el] | 17.888917 | 0.0 | 17.277015 | 0.0 | 0.0 | 0.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| capexCap | [€/a] | 1842.816913 | 0.0 | 1779.782223 | 0.0 | 0.0 | 0.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| capexIfBuilt | [€/a] | 73.58175 | 0.0 | 73.58175 | 0.0 | 0.0 | 0.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| commissioning | [kW_el] | 17.888917 | 0.0 | 17.277015 | 0.0 | 0.0 | 0.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| invest | [€] | 26044.483248 | 0.0 | 25187.821238 | 0.0 | 0.0 | 0.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| isBuilt | [-] | 1.0 | 0.0 | 1.0 | 0.0 | 0.0 | 0.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| operation | [kW_el*h/a] | 11358.66816 | 0.0 | 14752.64199 | 0.0 | 0.0 | 0.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| [kW_el*h] | 11358.66816 | 0.0 | 14752.64199 | 0.0 | 0.0 | 0.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ||
| opexIfBuilt | [€/a] | 10.0 | 0.0 | 10.0 | 0.0 | 0.0 | 0.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
fig, ax = fn.plotOperationColorMap(esM, "PV", "bd1")
fig, ax = fn.plotOperationColorMap(esM, "Electricity demand", "bd1")
fig, ax = fn.plotOperationColorMap(esM, "Electricity purchase", "transformer")
fig, ax = fn.plotOperationColorMap(esM, "NaturalGas purchase", "transformer")
Conversion¶
esM.getOptimizationSummary("ConversionModel", outputLevel=2)
| bd1 | bd2 | bd3 | bd4 | bd5 | bd6 | grid1 | grid2 | grid3 | grid4 | grid5 | grid6 | grid7 | transformer | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Component | Property | Unit | ||||||||||||||
| Boiler | NPVcontribution | [€] | 883.607351 | 980.718203 | 937.643993 | 1004.157289 | 956.361348 | 955.452658 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
| TAC | [€/a] | 859.607351 | 956.718203 | 913.643993 | 980.157289 | 932.361348 | 931.452658 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | |
| capacity | [kW_th] | 88.823444 | 102.021126 | 96.1672 | 105.206574 | 98.71095 | 98.587456 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | |
| capexCap | [€/a] | 653.57845 | 750.689302 | 707.615092 | 774.128388 | 726.332447 | 725.423757 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | |
| capexIfBuilt | [€/a] | 206.028901 | 206.028901 | 206.028901 | 206.028901 | 206.028901 | 206.028901 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | |
| commissioning | [kW_th] | 88.823444 | 102.021126 | 96.1672 | 105.206574 | 98.71095 | 98.587456 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | |
| invest | [€] | 11682.344434 | 13002.1126 | 12416.720027 | 13320.65743 | 12671.094992 | 12658.745602 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | |
| isBuilt | [-] | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | |
| operation | [kW_th*h/a] | 213048.223269 | 211990.635343 | 212185.711381 | 212891.770831 | 213017.011012 | 213383.858478 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | |
| [kW_th*h] | 213048.223269 | 211990.635343 | 212185.711381 | 212891.770831 | 213017.011012 | 213383.858478 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | ||
| opexIfBuilt | [€/a] | 24.0 | 24.0 | 24.0 | 24.0 | 24.0 | 24.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
fig, ax = fn.plotOperationColorMap(esM, "Boiler", "bd1")
Storage¶
esM.getOptimizationSummary("StorageModel", outputLevel=2)
| bd1 | bd2 | bd3 | bd4 | bd5 | bd6 | grid1 | grid2 | grid3 | grid4 | grid5 | grid6 | grid7 | transformer | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Component | Property | Unit | ||||||||||||||
| Battery Storage | operationCharge | [kW_el*h/a] | -0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| [kW_el*h] | -0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ||
| operationDischarge | [kW_el*h/a] | -0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| [kW_el*h] | -0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ||
| Thermal Storage | NPVcontribution | [€] | 244.728977 | 223.545122 | 211.68068 | 214.875936 | 210.820358 | 210.313178 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| TAC | [€/a] | 244.728977 | 223.545122 | 211.68068 | 214.875936 | 210.820358 | 210.313178 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
| capacity | [kW_th*h] | 158.340652 | 144.551657 | 136.828854 | 138.908711 | 136.268854 | 135.93872 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| capexCap | [€/a] | 243.256702 | 222.072847 | 210.208405 | 213.403661 | 209.348083 | 208.840902 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| capexIfBuilt | [€/a] | 1.472275 | 1.472275 | 1.472275 | 1.472275 | 1.472275 | 1.472275 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| commissioning | [kW_th*h] | 158.340652 | 144.551657 | 136.828854 | 138.908711 | 136.268854 | 135.93872 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| invest | [€] | 3823.175639 | 3492.239765 | 3306.892507 | 3356.809053 | 3293.452493 | 3285.529273 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| isBuilt | [-] | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| operationCharge | [kW_th*h/a] | 23892.887954 | 15657.545754 | 19326.481737 | 14554.58571 | 19826.532299 | 26109.918425 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| [kW_th*h] | 23892.887954 | 15657.545754 | 19326.481737 | 14554.58571 | 19826.532299 | 26109.918425 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ||
| operationDischarge | [kW_th*h/a] | 23853.003985 | 15628.283602 | 19300.971962 | 14528.283984 | 19797.467218 | 26086.680208 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| [kW_th*h] | 23853.003985 | 15628.283602 | 19300.971962 | 14528.283984 | 19797.467218 | 26086.680208 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
fig, ax = fn.plotOperationColorMap(
esM, "Thermal Storage", "bd1", variableName="stateOfChargeOperationVariablesOptimum"
)
Transmission¶
esM.getOptimizationSummary("TransmissionModel", outputLevel=2)
| bd1 | bd2 | bd3 | bd4 | bd5 | bd6 | grid1 | grid2 | grid3 | grid4 | grid5 | grid6 | grid7 | transformer | ||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Component | Property | Unit | LocationIn | ||||||||||||||
| E_Distribution_Grid | capacity | [kW_el] | bd1 | NaN | NaN | NaN | NaN | NaN | NaN | 10000.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| bd2 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 10000.0 | NaN | NaN | NaN | NaN | NaN | NaN | |||
| bd3 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 10000.0 | NaN | NaN | NaN | NaN | NaN | |||
| bd4 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 10000.0 | NaN | NaN | NaN | |||
| bd5 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 10000.0 | NaN | NaN | |||
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| NG_Distribution_Grid | operation | [kW_CH4_LHV*h] | grid4 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 0.0 | NaN | 703221.904353 | NaN | NaN | NaN |
| grid5 | NaN | NaN | NaN | 234180.947914 | NaN | NaN | NaN | NaN | NaN | 0.0 | NaN | 469040.956439 | NaN | NaN | |||
| grid6 | NaN | NaN | NaN | NaN | 234318.712113 | NaN | NaN | NaN | NaN | NaN | 0.0 | NaN | 234722.244326 | NaN | |||
| grid7 | NaN | NaN | NaN | NaN | NaN | 234722.244326 | NaN | NaN | NaN | NaN | NaN | 0.0 | NaN | NaN | |||
| transformer | NaN | NaN | NaN | NaN | NaN | NaN | 1404168.931345 | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
102 rows × 14 columns