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
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()
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.
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()