Home > OS >  Implement a loop that keeps the user entering the input until the condition is not met
Implement a loop that keeps the user entering the input until the condition is not met

Time:01-03

Hey guys I hope you're doing well.

The problem I have is that my loop is not well defined, therefore the condition that I give it is not met. The print of the DataFrame that I implemented inside the while loop is not performed when the condition is not met.

This is the code I have so far. By implementing the while loop it stopped returning me the modified dataframe. As I said before, the loop is poorly constructed.

Dataframe content:


   1  2  3  4  5  6  7  8  9
A  5  3  X  X  7  X  X  X  X
B  6  X  X  1  9  5  X  X  X
C  X  9  8  X  X  X  X  6  X
D  8  X  X  X  6  X  X  X  3
E  4  X  X  8  X  3  X  X  1
F  7  X  X  X  2  X  X  X  6
G  X  6  X  X  X  X  2  8  X
H  X  X  X  4  1  9  X  X  5
I  X  X  X  X  8  X  X  7  9

Code:


import pandas as pd

def modifyDF():

    T = pd.read_fwf('file', header= None, names=['1','2','3','4','5','6','7','8','9'])
    T = T.rename(index={0:'A',1:'B',2:'C',3:'D',4:'E',5:'F',6:'G',7:'H',8:'I'})
    df = pd.DataFrame(T)
    print(T,'\n')
    
    x= input('row: ')
    y= input('column: ')
    v= input('value: ')
    
    while 'X' in df:
        f = df.loc[x,y]= v
        print(f)
    
    while 'X' not in df:
        break

modifyDF()

Expected OUTPUT:


   1  2  3  4  5  6  7  8  9
A  5  3  X  X  7  X  X  X  X
B  6  X  X  1  9  5  X  X  X
C  X  9  8  X  X  X  X  6  X
D  8  X  X  X  6  X  X  X  3
E  4  X  X  8  X  3  X  X  1
F  7  X  X  X  2  X  X  X  6
G  X  6  X  X  X  X  2  8  X
H  X  X  X  4  1  9  X  X  5
I  X  X  X  X  8  X  X  7  9

row: D      #For example
column: 2   #For example
value: 1    #For example

#The modified dataframe:

   1  2  3  4  5  6  7  8  9
A  5  3  X  X  7  X  X  X  X
B  6  X  X  1  9  5  X  X  X
C  X  9  8  X  X  X  X  6  X
D  8  1  X  X  6  X  X  X  3
E  4  X  X  8  X  3  X  X  1
F  7  X  X  X  2  X  X  X  6
G  X  6  X  X  X  X  2  8  X
H  X  X  X  4  1  9  X  X  5
I  X  X  X  X  8  X  X  7  9

#The goal would be for this to run like a loop until there are no 'X' left in the dataframe.

I really appreciate your help :)

CodePudding user response:

Generally speaking, you'd better not loop through a pandas DataFrame, but use more pythonic methods. In this case, you need to move your while loop a bit higher in your code, before the input statements, so your function would become:

def modifyDF():

    T = pd.read_fwf('file', header=None, names=['1','2','3','4','5','6','7','8','9'])
    T = T.rename(index={0:'A',1:'B',2:'C',3:'D',4:'E',5:'F',6:'G',7:'H',8:'I'})
    df = pd.DataFrame(T)
    print(T,'\n')

    while df.isin(['X']).any().any():
        x = input('row: ')
        y = input('column: ')
        v = input('value: ')
        
        df.loc[x,y] = v
        f = v
        print(f)

Also remember that f = df.loc[x,y]= v is wrong in Python.

  • Related