In this code I readed the excel file, but didn’t know how to use the input table in python.. How this can be done? and how can I work with indexing? because it gave me error that the rowID as index is string type and not integer.
import knime.scripting.io as knio
import pandas as pd
This example script simply outputs the node’s input table.
data = knio.input_tables[0]
input_file_path = r"C:\Users\uig44188\Desktop\Analysis\InputData\MyData.xlsx"
data = pd.read_excel(input_file_path)
Convert ‘TimeStamp’ to datetime for correct diff calculation
data[‘TimeStamp’] = pd.to_datetime(data[‘TimeStamp’], format=‘%d/%m/%Y %H:%M:%S:%f’)
Sort the data by ‘TimeStamp’
data.sort_values(‘TimeStamp’, inplace=True)
Identify indices where ‘Weight’ drops to zero or below (potential cycle starts)
zero_crossings = data.index[data[‘Weight’] <= 0].tolist()
Initialize a list to store the maximum of each cycle
maxima_each_cycle =
for i in range(len(zero_crossings)-1):
# Define the cycle as the data between this zero crossing and the next
cycle_data = data.iloc[zero_crossings[i]:zero_crossings[i+1]]
# Find the index and value of the maximum weight in this cycle
max_idx = cycle_data['Weight'].idxmax()
max_weight = cycle_data.loc[max_idx, 'Weight']
# Only consider the maximum if it is after the zero crossing and greater than 130
if max_idx > zero_crossings[i] and max_weight > data['Weight'].max() * 0.8 :
maxima_each_cycle.append((cycle_data.loc[max_idx, 'TimeStamp'], max_weight))
Convert the list to a DataFrame
maxima_each_cycle_df = pd.DataFrame(maxima_each_cycle, columns=[‘TimeStamp’, ‘Max Weight’])
merged_data = pd.merge(data, maxima_each_cycle_df, on=‘TimeStamp’, how=‘left’)
knio.output_tables[0] = knio.Table.from_pandas(merged_data)