Need help understanding why my Python script is not saving an output file in the designated folder. Please let me know if you have any recommendations.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
import pandas as pd folder_path = r 'T:\04. Testing\3. Wear Testing\TESTS\CKUW\180604 OP STRAPLESS\Survey Response Data/' mapping_path = folder_path + 'Survey_MappingTable Strapless.xlsx' # Read mapping table mapping = pd.ExcelFile(mapping_path) mapping.sheet_names # ['SurveyInfo', 'Question Mapping', 'Answer Mapping'] # Transform sheets to 3 tables (surveyinfo, Q_mapping, A_mapping) surveyinfo = mapping.parse( "SurveyInfo" ) Q_mapping = mapping.parse( "Question Mapping" , skiprows = 2 ) A_mapping = mapping.parse( "Answer Mapping" , skiprows = 3 ) # Get input file name and read the data. Table name is df. input_file_name = surveyinfo.loc[surveyinfo[ 'Parameter Name' ] = = 'Input File Name' , 'Value' ].to_string(index = False ) path = r 'T:\04. Testing\3. Wear Testing\TESTS\CKUW\180604 OP STRAPLESS\Survey Response Data/' + input_file_name df = pd.read_csv(path,header = None ,engine = 'python' ) # ,encoding='utf-8' Tried this as a way to fix but it didn't work # Fill in previous colunmn names if blank, using the preceeding header df.iloc[ 0 ] = df.iloc[ 0 ].fillna(method = 'ffill' ) # Read the count of columns n_col = len (df.iloc[ 0 ]) n_respondent = len (df) - 2 c_name = [] for i in range (n_col): # Multiple columns; each columns with differnt single answer. and the question text is to combine the category ex. support, comfort, are both in the satisfaction category etc. # If it's satisfaction question, concatenate first row and second row if "satisfaction" in df.iloc[ 0 ][i]: c_name.append(df.iloc[ 0 ][i] + df.iloc[ 1 ][i]) elif "functionality" in df.iloc[ 0 ][i]: c_name.append(df.iloc[ 0 ][i] + df.iloc[ 1 ][i]) elif ( "shape" in df.iloc[ 0 ][i]) and ( "please specify" in df.iloc[ 1 ][i]): c_name.append(df.iloc[ 0 ][i] + df.iloc[ 1 ][i]) elif ( "room in the cup" in df.iloc[ 0 ][i]) and ( "please specify" in df.iloc[ 1 ][i]): c_name.append(df.iloc[ 0 ][i] + df.iloc[ 1 ][i]) # - in the column header which is part of the question and part of the response elif ( "wire" in df.iloc[ 0 ][i]) and ( "Response" not in df.iloc[ 1 ][i]): if "-" in df.iloc[ 1 ][i]: c_name.append(df.iloc[ 0 ][i] + df.iloc[ 1 ][i][df.iloc[ 1 ][i].find( "-" ) + 2 :]) else : c_name.append(df.iloc[ 0 ][i] + df.iloc[ 1 ][i]) for j in range (n_respondent): if pd.notnull(df.iloc[j + 2 ,i]) and "please specify" not in df.iloc[ 1 ,i]: df.iloc[j + 2 ,i] = df.iloc[ 1 ,i][:df.iloc[ 1 ][i].find( "-" ) - 1 ] # Multiple columns; each columns with differnt single answer. and the question text is not to combine the category. # Use to combine band and cup size elif "size bra do you typically wear?" in df.iloc[ 0 ][i]: c_name.append(df.iloc[ 0 ][i]) for j in range (n_respondent): if pd.notnull(df.iloc[j + 2 ,i]): df.iloc[j + 2 ,i] = df.iloc[ 1 ,i] + df.iloc[j + 2 ,i] # Single answer to the question; or multiple answers to the question but the answer is the same as the column header else : c_name.append(df.iloc[ 0 ][i]) # Make the column names as the first row df.columns = c_name # Drop the first and second rows df2 = df.drop(df.index[[ 0 , 1 ]]) # Transform the wide dataset to a long dataset; r = list ( range ( 10 )) + list ( range ( 17 , 20 )) # skipping "What size bra do you typically wear? (only select one size)" df_long = pd.melt(df2,id_vars = list (df.columns[r]), var_name = 'Question' , value_name = 'Answer' ) # Delete rows with null value to answer df_long_notnull = df_long[pd.notnull(df_long[ 'Answer' ])] # Make typically wear as a column dimension sizewear = df_long_notnull.loc[df_long_notnull[ 'Question' ] = = 'What size bra do you typically wear? (Only select one size)' ] sizewear2 = sizewear[[ 'Respondent ID' , 'Collector ID' , 'Email Address' , 'Answer' ]] sizewear2.columns = [ 'Respondent ID' , 'Collector ID' , 'Email Address' , 'What size bra do you typically wear?' ] df_long_notnull2 = df_long_notnull[df_long_notnull[ 'Question' ] ! = 'What size bra do you typically wear? (Only select one size)' ] df_final = pd.merge(df_long_notnull2, sizewear2, how = 'left' , on = [ 'Respondent ID' , 'Collector ID' , 'Email Address' ]) # Join Answer description mapping table df_full = pd.merge(df_final, A_mapping, how = 'left' , left_on = [ 'Question' , 'Answer' ], right_on = [ 'Question' , 'Answer Description' ]) df_full.loc[df_full[ 'Answer_y' ].isnull(), 'Answer_y' ] = df_full[ 'Answer_x' ] df_full.loc[df_full[ 'Answer Description' ].isnull(), 'Answer Description' ] = df_full[ 'Answer_x' ] df_full = df_full.drop(labels = [ 'Answer_x' ], axis = 1 ) df_full = df_full.rename(columns = { 'Answer_y' : 'Answer' , 'Answer Description' : 'Answer Desc' }) # Join Question Mapping table df_full = pd.merge(df_full,Q_mapping, how = 'left' , left_on = [ 'Question' ], right_on = [ 'Raw Column Name' ]) df_full = df_full.drop(labels = [ 'Raw Column Name' ], axis = 1 ) # Get Survey Info product_name = surveyinfo.loc[surveyinfo[ 'Parameter Name' ] = = 'Product Name' , 'Value' ].to_string(index = False ) if "," in surveyinfo.loc[surveyinfo[ 'Parameter Name' ] = = 'Style Number' , 'Value' ].item(): style_number = surveyinfo.loc[surveyinfo[ 'Parameter Name' ] = = 'Style Number' , 'Value' ].to_string(index = False ).split( ',' ) style_number = [s.strip() for s in style_number] else : style_number = surveyinfo.loc[surveyinfo[ 'Parameter Name' ] = = 'Style Number' , 'Value' ].to_string(index = False ) if "," in surveyinfo.loc[surveyinfo[ 'Parameter Name' ] = = 'Style Name' , 'Value' ].item(): style_name = surveyinfo.loc[surveyinfo[ 'Parameter Name' ] = = 'Style Name' , 'Value' ].to_string(index = False ).split( ',' ) style_name = [s.strip() for s in style_name] else : style_name = surveyinfo.loc[surveyinfo[ 'Parameter Name' ] = = 'Style Name' , 'Value' ].to_string(index = False ) # get survey information survey_name = surveyinfo.loc[surveyinfo[ 'Parameter Name' ] = = 'Survey Name' , 'Value' ].to_string(index = False ) survey_id = surveyinfo.loc[surveyinfo[ 'Parameter Name' ] = = 'Survey ID' , 'Value' ].item() survey_year = surveyinfo.loc[surveyinfo[ 'Parameter Name' ] = = 'Survey Year' , 'Value' ].item() survey_mo = surveyinfo.loc[surveyinfo[ 'Parameter Name' ] = = 'Survey Month' , 'Value' ].item() output_file_name = surveyinfo.loc[surveyinfo[ 'Parameter Name' ] = = 'Output File Name' , 'Value' ].to_string(index = False ) # adding columns for survey information df_full[ 'Product Name' ] = product_name df_full[ 'Survey Name' ] = survey_name df_full[ 'Survey ID' ] = survey_id df_full[ 'Survey Year' ] = survey_year df_full[ 'Survey Month' ] = survey_mo ### create a table with style_number and style_name if type (style_name) = = list : style_t = pd.DataFrame( list ( zip (style_name, style_number)), columns = list ([ "Style_Name" , "Style_Number" ])) df_full = pd.merge(df_full, style_t, how = 'left' , left_on = [ 'Which style did you receive?' ], right_on = [ 'Style_Name' ]) else : df_full[ 'Style Name' ] = style_name df_full[ 'Style Number' ] = style_number # Identify the path for saving output file path_out = 'T:/04. Testing/3. Wear Testing/PROJECTS/CKUW/Bras/Strapless Bra Survey/Survey Response Data/' + output_file_name # Save as comma separated csv file df_full.to_csv(path_out, sep = ',' , index = False ) |
Error:runfile('T:/04. Testing/3. Wear Testing/TESTS/CKUW/180604 OP STRAPLESS/Python Code/StraplessBra_comments_OPStrapless.py')