Определить имя файла с Pandas в csv - PullRequest
1 голос
/ 07 мая 2020

Итак, у меня есть сценарий, способный найти z-оценку для разных фреймов данных.

Я бы хотел, чтобы мой скрипт сохранял мои файлы (если я применяю его к нескольким фреймам данных) под определенным c именем в зависимости от имени фрейма данных, к которому я применяю скрипт.

Вот мой фрейм данных:

data = pd.DataFrame({'col1': [1,2,3,4,5,6,7,8,9,10]})

И это код, который я использую:

import numpy as np
import pandas as pd
from statistics import mean
import csv

class stats:
    def __init__(self, df):
        self.df = df
        self.min = self.get_min()
        self.pos = self.get_pos()
        self.log = self.get_log()
        self.z = self.get_z()
        #self.mean = self.get_mean()

    def get_min(self):
        get_min = abs(np.amin(self.df))
        return get_min

    def get_pos(self):
        get_pos = self.df + self.get_min() + 1
        return get_pos

    def get_log(self):
        get_log = np.log2(self.get_pos())
        return get_log

    def get_z(self):
        z_score = []
        get_z = (self.get_log() - np.mean(self.get_log()))/np.std(self.get_log(), ddof=1)
        z_score.append(get_z)
        return get_z

    def save_z(self):
        self.get_z().to_csv("z_" + str(z_data) + ".csv")


data = pd.DataFrame({'col1': [1,2,3,4,5,6,7,8,9,10]})
data_list = list(data.columns)
z_data = stats(df=(data[data_list]))

#print(z_data.get_min())
#print(z_data.get_pos())
#print(z_data.get_log())
#print(z_data.get_z())

if __name__ == '__main__':
    z_data.save_z()

Часть, которую я пытаюсь исправить, это:

def save_z(self):
        self.get_z().to_csv("z_" + str(data) + ".csv")

Я бы хотел, чтобы мой файл имел имя «z_data.csv» (если бы имя фрейма данных было x, имя было бы «z_x.csv»).

Спасибо заранее!

1 Ответ

0 голосов
/ 07 мая 2020

Вы хотите имя переменной? По различным сложным причинам, связанным с объектной моделью python, вы не можете * этого сделать (* легко или без ловушек).

Намного понятнее и надежнее просто передать строку вашему классу:

import numpy as np
import pandas as pd
from statistics import mean
import csv

class stats:
    def __init__(self, df, label):
        self.df = df
        self.label = label
        self.min = self.get_min()
        self.pos = self.get_pos()
        self.log = self.get_log()
        self.z = self.get_z()
        #self.mean = self.get_mean()

    def get_min(self):
        get_min = abs(np.amin(self.df))
        return get_min

    def get_pos(self):
        get_pos = self.df + self.get_min() + 1
        return get_pos

    def get_log(self):
        get_log = np.log2(self.get_pos())
        return get_log

    def get_z(self):
        z_score = []
        get_z = (self.get_log() - np.mean(self.get_log()))/np.std(self.get_log(), ddof=1)
        z_score.append(get_z)
        return get_z

    def save_z(self):
        self.get_z().to_csv("z_" + self.label + ".csv")


data = pd.DataFrame({'col1': [1,2,3,4,5,6,7,8,9,10]})
data_list = list(data.columns)
z_data = stats(df=data[data_list], label='z')

#print(z_data.get_min())
#print(z_data.get_pos())
#print(z_data.get_log())
#print(z_data.get_z())

if __name__ == '__main__':
    z_data.save_z()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...