Python program działający na ramce danych

0

Witam,
próbuje stworzyć program, który będzie pracował na plikach csv. Wczytanie danych z pliku csv to banał, ale zatrzymałem się na "podziale" tej bazowej tabelki na mniejsze. To jest kod:

import pandas as pd
class MyClass:
    def __init__(self):
        self.vector_roz = ["M","K"]
        self.file = 'test.txt'
        self.df = pd.read_csv(self.file,header=None)
        self.covert()

        for i in range(len(self.vector_roz)):
            exec(self.vector_roz[i] + " = self.df.loc[self.df[1] == self.vector_roz[i]]")

    def covert(self):
        self.new_file = self.file[0:len(self.file) - 4] + '_csv_convent.csv'
        self.data = pd.read_csv(self.file)
        self.data.to_csv(self.new_file, index=None)
        return self.new_file


cl = MyClass()
print(cl.df)
print('////////////////////')
print(cl.M)

Chodzi o to żeby tabelko miały takie nazwy jak wartości wektora vector_roz, ale po kompilacji wywala błąd, że te tabelki nie istnieją. Bardzo mi zależy, żeby to było tak robione, bo chce w przyszłości używać tego programu to bardziej skomplikowanych csv i wtedy będzie łatwiej zmienić ten wektor. Będę wdzięczy za wszelką pomoc. W załączniku jest zdjęcie co chcę żeby się wyświetliło po wykonaniu 21 linijki.

0

Nie wnikam w Twoją klasę, bo mi się nie podoba. Najszybciej zrobiłbym to tak:

import pandas as pd

df = pd.read_csv('test.txt', header=None)
print(df[df[1] == 'M'])
0

No to może takie rozwiązanie na szybko:

import pandas as pd


class MyClass:

    def __init__(self):
        self.vector = ['M', 'K']
        self.df = pd.read_csv('test.txt', header=None)
        self.set_attributes()

    def set_attributes(self):
        for v in self.vector:
            setattr(self, v, self.df[self.df[1] == v])


if __name__ == '__main__':
    cl = MyClass()
    print(cl.df)
    print(cl.M)
    print(cl.K)
0

Przykład z tuplą:

x=1
y=2

t=(x,y)

d={t:'wartosc1'}

print(d)
print(d[(x,y)])

Może to jest rozwiązaniem Twojego problemu?

Pozdrawiam
Radek Głębicki

0

a jak bym chciał potem wykorzystać jeszcze te nazwy na po to żeby nadać nazwy kolumną?

import pandas as pd

class MyClass:

    def __init__(self, vector):
        self.vector = vector
        self.df = pd.read_csv('test.txt', header=None)
        self.set_attributes()

    def set_attributes(self):
        for v in self.vector:
            setattr(self, v, self.df[self.df[1] == v])

if __name__ == '__main__':
    vector = ['M', 'K']
    cl = MyClass(vector)

    for v in vector:
        print(getattr(cl, v))

1 użytkowników online, w tym zalogowanych: 0, gości: 1