Python Forum
Help with to check an Input list data with a data read from an external source - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Help with to check an Input list data with a data read from an external source (/thread-41726.html)



Help with to check an Input list data with a data read from an external source - sacharyya - Mar-08-2024

[attachment=2762]

I am not from coding background but currently am coding using python due to job requirements.
I have attached the code with which I need help with. The basics of the code is that I am trying to read and write data from some electronic sensors using some data acquisition systems (DAQ).
These are what I am trying to achieve using this code:
1. Read an external .csv/.txt file containing these following column names (Disp, Voltage 1, Voltage 2, Logic). This is then saved as a data frame.

2. A displacement value is then read from a daq and is then checked against the Disp value in the data frame. The comparison is based on the Logic column which is either <= or >=. The check will occur row by row for the input data frame.

3. please keep in mind that once a line/row is checked in the data frame it should not be checked again.

4. when the logical check returns false the Voltage values (Voltage 1 and Voltage 2) are returned as outputs. i.e if my read displacement is checked at the ith line that it is not <= the Disp value in the ith line then my output will be Voltage 1 and Voltage 2 from (i-1)th line.

5. this check will go for the length of the data frame.

6. Once the full check across the data frame is done it is considered a cycle completion.

7. The whole loop needs to run for as long as cycle number <= max number of cycles (which is a user defined input declared previously).

Will be greatly indebted if I can get a solution to this dilemma. As as per my attached code the checking of read displacement with the Disp value in the data frame is not occurring correctly


RE: Help with to check an Input list data with a data read from an external source - Pedroski55 - Mar-08-2024

As I understand your request:

Quote:1. Read data from an example Excel/csv/text which you did not supply.

2. Returns True or False, so for testing, any list of True or False values would suffice to mimic your daq/Disp comparison. If this list reflects the reality on the ground there, would be better. If we had such a list, even better!

4. If the daq/Disp comparison turns out to be False, write the values from the csv we don't have to the datafame we don't have.

5. Check the whole length of the data frame we don't have.

6. After checking the whole df stop.

7. But don't stop until you have checked the df x cycles where x is a number we don't have.

How then can I try this out to see if it works or not?

Doesn't actually seem to hard, if one had some data to work with and check.


RE: Help with to check an Input list data with a data read from an external source - sacharyya - Mar-08-2024

(Mar-08-2024, 10:30 AM)Pedroski55 Wrote: As I understand your request:

Quote:1. Read data from an example Excel/csv/text which you did not supply.

2. Returns True or False, so for testing, any list of True or False values would suffice to mimic your daq/Disp comparison. If this list reflects the reality on the ground there, would be better. If we had such a list, even better!

4. If the daq/Disp comparison turns out to be False, write the values from the csv we don't have to the datafame we don't have.

5. Check the whole length of the data frame we don't have.

6. After checking the whole df stop.

7. But don't stop until you have checked the df x cycles where x is a number we don't have.

How then can I try this out to see if it works or not?

Doesn't actually seem to hard, if one had some data to work with and check.

[attachment=2764][attachment=2763]

My bad I have supplied two attachments one is the input file and the other is the sample displacement being read. The max number of cycles is not fixed but for this purpose we can assume it to be let us say 3. I hope I was able to clarify.


RE: Help with to check an Input list data with a data read from an external source - Pedroski55 - Mar-09-2024

Maybe something like this is what you are looking for?

Your Excel file is much longer than the csv!

import pandas as pd
import csv

# open the XL file
xl_file = '/home/pedro/myPython/pandas/xl_files/Sample_ Input_ File.xlsx'
dfXL = pd.read_excel(xl_file) # 402 rows
# columns = list(dfXL) # ['Disp', 'Voltage 1', 'Voltage 2', 'Logic']

# open the csv
csv_file = '/home/pedro/myPython/pandas/csv_files/sample _read_ displacement.csv'
dfcsv = pd.read_csv(csv_file) # 190 rows 1 column called Displacement

"""
2. A displacement value is then read from a daq and is then checked against the Disp value in the data frame.
The comparison is based on the Logic column which is either <= or >=.
The check will occur row by row for the input data frame.

3. please keep in mind that once a line/row is checked in the data frame it should not be checked again.

4. when the logical check returns false the Voltage values (Voltage 1 and Voltage 2) are returned as outputs.
i.e if my read displacement is checked at the ith line that it is not <= the Disp value in the ith line
then my output will be Voltage 1 and Voltage 2 from (i-1)th line..
"""

def getVoltsLess(n):
    if dfcsv['Displacement'][n] <= dfXL['Disp'][n]: # True
        print(f'Measured voltage {dfcsv["Displacement"][num]} <= required volts {df["Disp"][num]}')
        return (0, dfcsv['Displacement'][n])
    else: # False
        print(f'Measured voltage {dfcsv["Displacement"][num]} > required volts {df["Disp"][num]}')
        return (dfXL['Voltage 1'][n], dfXL['Voltage 2'][n]) 

def getVoltsMore(n):
    if dfcsv['Displacement'][n] >= dfXL['Disp'][n]: # True
        print(f'Measured voltage {dfcsv["Displacement"][num]} > required volts {dfXL["Disp"][num]}')
        return (0, dfcsv['Displacement'][n])
    else: # False
        print(f'Measured voltage {dfcsv["Displacement"][num]} < required volts {dfXL["Disp"][num]}')
        return (dfXL['Voltage 1'][n], dfXL['Voltage 2'][n]) 

# just repeat this loop in a loop to do it all again 3 times
for num in dfcsv.index:
    if dfXL['Logic'][num] == '<=':
        volts = getVoltsLess(num)
        print(f'Logic is {logic}, volts are {volts}')
    elif dfXL['Logic'][num] == '>=':
        volts = getVoltsMore(num)
        print(f'Logic is {logic}, volts are {volts}')