@@ -1537,26 +1537,41 @@ def retrieve_sam(name=None, path=None):
1537
1537
return _parse_raw_sam_df (csvdata )
1538
1538
1539
1539
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
+
1540
1567
def _parse_raw_sam_df (csvdata ):
1568
+
1541
1569
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 )
1559
1573
df = df .transpose ()
1574
+
1560
1575
if 'ADRCoefficients' in df .index :
1561
1576
ad_ce = 'ADRCoefficients'
1562
1577
# for each inverter, parses a string of coefficients like
0 commit comments