@@ -111,19 +111,33 @@ def add_extractor(
111111 values: Initial values of the Extractor per instance in the dataframe.
112112 Defaults to FeatureDataFrame.missing_value.
113113 """
114+ if extractor in self .extractors :
115+ print (
116+ f"WARNING: Tried adding already existing extractor { extractor } to "
117+ f"Feature DataFrame: { self .csv_filepath } "
118+ )
119+ return
114120 if values is None :
115121 values = [self .missing_value ] * len (
116122 extractor_features
117123 ) # Single missing value for each feature
124+ extractor_dim = self .columns .get_level_values (FeatureDataFrame .extractor_dim )
118125 # Unfold to indices to lists
119126 for index , (feature_group , feature ) in enumerate (extractor_features ):
120127 self [(extractor , feature_group , feature )] = values [index ]
121- if (
122- self .num_extractors == 2 and str (math .nan ) in self .extractors
123- ): # Upon successfull adding of the extractor, remove the nan extractor
124- self .drop (
125- str (math .nan ), axis = 1 , level = FeatureDataFrame .extractor_dim , inplace = True
126- )
128+ if self .num_extractors > 1 :
129+ # Upon successfull adding of the extractor, remove the nan extractor
130+ if str (math .nan ) in extractor_dim :
131+ self .drop (
132+ str (math .nan ),
133+ axis = 1 ,
134+ level = FeatureDataFrame .extractor_dim ,
135+ inplace = True ,
136+ )
137+ elif math .nan in extractor_dim :
138+ self .drop (
139+ math .nan , axis = 1 , level = FeatureDataFrame .extractor_dim , inplace = True
140+ )
127141
128142 def add_instances (
129143 self : FeatureDataFrame , instance : str | list [str ], values : list [float ] = None
@@ -144,7 +158,7 @@ def remove_extractor(self: FeatureDataFrame, extractor: str) -> None:
144158 # if self.num_extractors == 0:
145159 if self .num_extractors == 0 : # make sure we have atleast one 'extractor'
146160 self .add_extractor (
147- FeatureDataFrame .missing_value ,
161+ str ( FeatureDataFrame .missing_value ) ,
148162 [(FeatureDataFrame .missing_value , FeatureDataFrame .feature_name_dim )],
149163 )
150164
@@ -276,8 +290,13 @@ def instances(self: FeatureDataFrame) -> list[str]:
276290 @property
277291 def extractors (self : FeatureDataFrame ) -> list [str ]:
278292 """Returns all unique extractors in the DataFrame."""
279- # return self.index.get_level_values("Extractor").unique().to_list()
280- return self .columns .get_level_values ("Extractor" ).unique ().to_list ()
293+ return [
294+ x
295+ for x in self .columns .get_level_values (
296+ FeatureDataFrame .extractor_dim
297+ ).unique ()
298+ if str (x ) != str (FeatureDataFrame .missing_value )
299+ ]
281300
282301 @property
283302 def num_features (self : FeatureDataFrame ) -> int :
0 commit comments