@@ -1537,26 +1537,41 @@ def retrieve_sam(name=None, path=None):
15371537 return _parse_raw_sam_df (csvdata )
15381538
15391539
1540+ def _normalize_sam_product_names (names ):
1541+ '''
1542+ Replace special characters within the product names to make them more
1543+ suitable for use as Dataframe column names.
1544+ '''
1545+ # Contributed by Anton Driesse (@adriesse), PV Performance Labs. July, 2019
1546+
1547+ import warnings
1548+
1549+ BAD_CHARS = ' -.()[]:+/",'
1550+ GOOD_CHARS = '____________'
1551+
1552+ mapping = str .maketrans (BAD_CHARS , GOOD_CHARS )
1553+ names = pd .Series (data = names )
1554+ norm_names = names .str .translate (mapping )
1555+
1556+ n_duplicates = names .duplicated ().sum ()
1557+ if n_duplicates > 0 :
1558+ warnings .warn ('Original names contain %d duplicate(s).' % n_duplicates )
1559+
1560+ n_duplicates = norm_names .duplicated ().sum ()
1561+ if n_duplicates > 0 :
1562+ warnings .warn ('Normalized names contain %d duplicate(s).' % n_duplicates )
1563+
1564+ return norm_names .values
1565+
1566+
15401567def _parse_raw_sam_df (csvdata ):
1568+
15411569 df = pd .read_csv (csvdata , index_col = 0 , skiprows = [1 , 2 ])
1542- colnames = df .columns .values .tolist ()
1543- parsedcolnames = []
1544- for cn in colnames :
1545- parsedcolnames .append (cn .replace (' ' , '_' ))
1546-
1547- df .columns = parsedcolnames
1548-
1549- parsedindex = []
1550- for index in df .index :
1551- parsedindex .append (index .replace (' ' , '_' ).replace ('-' , '_' )
1552- .replace ('.' , '_' ).replace ('(' , '_' )
1553- .replace (')' , '_' ).replace ('[' , '_' )
1554- .replace (']' , '_' ).replace (':' , '_' )
1555- .replace ('+' , '_' ).replace ('/' , '_' )
1556- .replace ('"' , '_' ).replace (',' , '_' ))
1557-
1558- df .index = parsedindex
1570+
1571+ df .columns = df .columns .str .replace (' ' , '_' )
1572+ df .index = _normalize_sam_product_names (df .index )
15591573 df = df .transpose ()
1574+
15601575 if 'ADRCoefficients' in df .index :
15611576 ad_ce = 'ADRCoefficients'
15621577 # for each inverter, parses a string of coefficients like
0 commit comments