Hi, i've implemented the following dataframe class.And I want you to implement the loc function based on the test_19 function.class DataFrame:
    def __init__(self, data, columns, index = True):
        self.data = data
        self.columns = columns
        self.index = True 

    def __repr__(self):
        rows = []
        rows.append(',' + ','.join(self.columns))
        for i, row in enumerate(self.data):
            #print(*[str(i) if self.index else '']  )
            rows.append(str(*[str(i) + ',' if self.index else ''])  + ','.join([str(val) for val in row]))
        return '\n'.join(rows)

    def __getitem__(self, key):
        if isinstance(key, str):
            values = [row[self.columns.index(key)] for row in self.data]
            return ListV2(values)
        elif isinstance(key, list):
            idx = [self.columns.index(k) for k in key]
            data = [[row[i] for i in idx] for row in self.data]
            return DataFrame(data=data, columns=key)
        elif isinstance(key, slice):
            if isinstance(key.start, int) and isinstance(key.stop, int):
                data = self.data[key.start:key.stop]
                return DataFrame(data=data, columns=self.columns)
            elif isinstance(key.start, int) and key.stop is None:
                data = self.data[key.start:]
                return DataFrame(data=data, columns=self.columns)
            elif key.start is None and isinstance(key.stop, int):
                data = self.data[:key.stop]
                return DataFrame(data=data, columns=self.columns)
            else:
                raise TypeError("Invalid slice argument")
        elif isinstance(key, tuple):
            row_slice, col_slice = key
            row_data = self.data[row_slice]
            col_data = [row[col_slice] for row in self.data[row_slice]]
            return DataFrame(data=col_data, columns=self.columns[col_slice])
        else:
            raise TypeError("Invalid argument type")

    def as_type(self, column, data_type):
        col_index = self.columns.index(column)
        for row in self.data:
            row[col_index] = data_type(row[col_index])

    def mean(self):
        result = {}
        for col in self.columns:
            if col != 'StudentName':
                idx = self.columns.index(col)
                col_values = [row[idx] for row in self.data]
                result[col] = sum(col_values) / len(col_values)
        return result
    

    def set_index(self, column):
        #index_column = ',' + ','.join(map(str, range(len(self.data))))
            
        for col_index, col in enumerate(map(list, zip(*self.data))):
            
            if column == col:

                #self.columns = list(filter(lambda x: self.columns.index(x) != col_index, self.columns))

                #return DataFrame(data= self.data,  columns = self.columns)
                self.columns = [self.columns[col_index]] + self.columns[:col_index] + self.columns[col_index+1:]
                
            
    
                new_data = []
                

                for i, row in enumerate(self.data):
             
                    index_data = [row[col_index]]
                    new_row = [i] + index_data + row[:col_index] + row[col_index+1:]
                    
                    new_data.append(new_row)
            
                self.data=new_data
                self.index = False
            break
            # else:
            #     raise ValueError(f"Column '{column}' does not exist in DataFrame")

                     # new_data =  

                # self.columns = list(filter(lambda x: self.columns.index(x) != col_index, self.columns))
                # break   

    def drop(self, column):
        if column in self.columns:
            col_index = self.columns.index(column)
            new_columns = [col for col in self.columns if col != column]
            new_data = []
            for row in self.data:
                new_row = row[:col_index] + row[col_index+1:]
                new_data.append(new_row)
            self.columns = new_columns
            self.data = new_data
            #print(self.columns, self.data[1])
        else:
            raise ValueError(f"Column '{column}' does not exist in DataFrame")


    def loc(self, row_selector, column_selector=None):
        pass
        
    

def test_19():
    columns = ('StudentName', 'E1', 'E2', 'E3', 'E4', 'E5')
    df = DataFrame(data=[ele.strip().split(',') for ele in open('testdata_1.txt')], columns=columns)

    for col in ['E1', 'E2', 'E3', 'E4', 'E5']:
        df.as_type(col, int)

    df.drop('E5')
    df.set_index(list(df['StudentName']))
    df.drop('StudentName')
    expected_output = """,E1,E2
student1,92,77
student2,74,93"""
    print(excepted_output ==  df.loc((['student1', 'student2'], ['E1', 'E2'])).__repr__()) this should be true.
test_19()