web-dev-qa-db-fra.com

Renvoyer une trame de données dans la fonction python

J'essaie de créer et de renvoyer un bloc de données à partir d'une fonction python

def create_df():
    data = {'state': ['Ohio','Ohio','Ohio','Nevada','Nevada'],
           'year': [2000,2001,2002,2001,2002],
           'pop': [1.5,1.7,3.6,2.4,2.9]}
    df = pd.DataFrame(data)
    return df
create_df()
df

Je reçois une erreur indiquant que df n'est pas défini. Si je remplace "retour" par "impression", j'obtiens correctement l'impression du bloc de données. Y a-t-il un moyen de faire cela? Merci

6
Manoj Agrawal

lorsque vous appelez create_df() python appelle la fonction mais n'enregistre le résultat dans aucune variable. c'est pourquoi vous avez obtenu l'erreur.

affecter le résultat de create_df() à df comme ceci df = create_df()

11
OLIVER.KOO

Je suis un peu en retard ici, mais qu'en est-il de la création d'une variable globale dans la fonction? Cela devrait vous épargner une étape.

def create_df():

    global df

    data = {
    'state': ['Ohio','Ohio','Ohio','Nevada','Nevada'],
    'year': [2000,2001,2002,2001,2002],
    'pop': [1.5,1.7,3.6,2.4,2.9]
    }

    df = pd.DataFrame(data)

Ensuite, lorsque vous exécutez create_df (), vous pourrez simplement utiliser df.

Bien sûr, soyez prudent dans votre stratégie de dénomination si vous avez un grand programme afin que la valeur de df ne change pas lorsque diverses fonctions s'exécutent.

EDIT: J'ai remarqué que j'ai obtenu quelques points pour cela. Voici une autre façon (probablement pire) de le faire en utilisant exec. Cela permet également de créer plusieurs trames de données, si vous le souhaitez.

import pandas as pd

def create_df():
    data = {'state': ['Ohio','Ohio','Ohio','Nevada','Nevada'],
           'year': [2000,2001,2002,2001,2002],
           'pop': [1.5,1.7,3.6,2.4,2.9]}
    df = pd.DataFrame(data)
    return df

### We'll create three dataframes for an example
for i in range(3):
    exec(f'df_{i} = create_df()')

Ensuite, vous pouvez les tester:

Contribution: df_0

Sortie:

    state  year  pop
0    Ohio  2000  1.5
1    Ohio  2001  1.7
2    Ohio  2002  3.6
3  Nevada  2001  2.4
4  Nevada  2002  2.9

Contribution: df_1

Sortie:

    state  year  pop
0    Ohio  2000  1.5
1    Ohio  2001  1.7
2    Ohio  2002  3.6
3  Nevada  2001  2.4
4  Nevada  2002  2.9

Etc.

3
Mark Moretto

La fonction renvoie explicitement deux DataFrames:

import pandas as pd
import numpy as np

def return_2DF():

date = pd.date_range('today', periods=20)
DF1 = pd.DataFrame(np.random.Rand(20, 2), index=date, columns=list('xyz'))

DF2 = pd.DataFrame(np.random.Rand(20, 4), index=date, columns='A B C D'.split())

return DF1, DF2

Appel et retour de deux trames de données

one, two = return_2DF()
0
Ram Prajapati