import pandas as pd
from foxes.core import Turbine
from foxes.config import get_input_path
[docs]
def add_from_csv(
farm,
data_source,
col_index=None,
col_name=None,
col_x="x",
col_y="y",
col_H=None,
col_D=None,
col_id=None,
cols_models_pre=None,
col_turbine_type=None,
cols_models_post=None,
turbine_base_name="T",
turbine_ids=None,
turbine_base_name_count_shift=False,
verbosity=1,
**turbine_parameters,
):
"""
Add turbines to wind farm via csv input file.
Parameters
----------
farm: foxes.WindFarm
The wind farm
data_source: str or pandas.DataFrame
The input csv file or data source
col_index: str, optional
The index column, or None
col_name: str, optional
The name column, or None
col_x: str, optional
The x column
col_y: str, optional
The y column
col_H: str, optional
The hub height column
col_D: str, optional
The rotor diameter column
col_id: str, optional
The id column
cols_models_pre: list of str, optional
The turbine model columns, entered before
turbine_models
col_turbine_type: str, optional
The turbine type name
cols_models_post: list of str, optional
The turbine model columns, entered after
turbine_models
turbine_base_name: str, optional
The turbine base name, only used
if col_name is None
turbine_ids: list, optional
The turbine ids, or None for
index
turbine_base_name_count_shift: bool, optional
Start turbine names by 1 instead of 0
verbosity: int
The verbosity level, 0 = silent
turbine_parameters: dict, optional
Additional parameters are forwarded to the WindFarm.add_turbine().
:group: input.farm_layout
"""
if isinstance(data_source, pd.DataFrame):
data = data_source
else:
if verbosity:
print("Reading file", data_source)
pth = get_input_path(data_source)
data = pd.read_csv(pth, index_col=col_index)
tmodels = turbine_parameters.pop("turbine_models", [])
H = turbine_parameters.pop("H", None)
D = turbine_parameters.pop("D", None)
for i in data.index:
s = 1 if turbine_base_name_count_shift else 0
tname = (
f"{turbine_base_name}{i+s}" if col_name is None else data.loc[i, col_name]
)
txy = data.loc[i, [col_x, col_y]].values
if turbine_ids is not None:
tid = turbine_ids[i]
elif col_id is not None:
tid = data.loc[i, col_id]
else:
tid = None
hmodels = (
[] if cols_models_pre is None else data.loc[i, cols_models_pre].tolist()
)
hmodels += [] if col_turbine_type is None else [data.loc[i, col_turbine_type]]
hmodels += tmodels
hmodels += (
[] if cols_models_post is None else data.loc[i, cols_models_post].tolist()
)
farm.add_turbine(
Turbine(
name=tname,
index=tid,
xy=txy,
H=H if col_H not in data.columns else data.loc[i, col_H],
D=D if col_D not in data.columns else data.loc[i, col_D],
turbine_models=hmodels,
**turbine_parameters,
),
verbosity=verbosity,
)