2016-11-15 58 views
0

我有幾個dataframes,如DF1,DF2等。然後,我做出這些DF年代的名單像lst = ['df1', 'df2']如何將df名稱字符串轉換回df's?

現在,我想使用的功能,這些DF的「my_func,並將()」

my_func(dataframe=df1) 

my_func(dataframe=df2) 

...

我怎樣才能表達dataframes列表中一個循環,這樣我可以在my_func,並將調用不同的DF的? (下面的方法不起作用,因爲我打電話的字符串,而不是df的...)

for i in lst: 
    my_func(dataframe=i) 

謝謝!

+1

你應該看看[字典](https://docs.python.org/3/tutorial/datastructures.html #dictionaries)代替。你會在哪裏做data_frames = {'df1':[],'df2':[]}',你可以直接訪問它們並將它們傳遞給函數。你甚至可以在data_frames.keys()中使用'df:my_func(dataframe = my_dataframes [df])' – Torxed

+0

確實,沒有必要用許多dfs來氾濫你的全球環境。包含像字典這樣的一個索引對象。 – Parfait

回答

1

我會爭辯說,將數據集的名稱存儲爲字符串,然後嘗試將字符串作爲參數傳遞會產生反效果。

相反,我要做的是創建一個包含所有數據集作爲字符串值的字典,並將字典對象傳遞到您的函數中。

my_frames = {'df1' : [1,2,3], 'df2' : [4,5,6]} 

def my_func(dataframe): 
    ... do work on dataframe ... 

for df_name, df_obj in my_frames.items(): 
    print('Doing work on:', df_name) 
    my_func(df_obj) 

字典和函數的另一件漂亮的事情是,你可以擴展字典作爲命名參數馬上蝙蝠。

my_frames = {'temperature' : 25.5, 'wind' : 4.6} 

def weather(temperature=None, wind=None): 
    print('The temp is:', temperature, 'and the wind speed is:', wind) 

weather(**my_frames) 

但這只是一個小方面的說明。

+0

但是在這種情況下,我已經準備好了所有的數據框,並且我不想做額外的工作來轉換它們... –

+0

@GeorgeLiu您並不需要轉換它們,字典更像是一個佔位符/存儲實用程序。您可以通過執行'my_frames = {'df1':df1,'df2':df2}'來添加列表。而且重構你的代碼也是明智的,所以它們最終會以正確的方式出現在字典中。再也不需要轉換它們,而是以不同的方式存儲它們。最終的結果可能是相同的,構建步驟可能是相同的,也可能是「我把它們放在哪裏」。 – Torxed

+0

我明白了。所以基本上,你說的df可以是一個字典中的值,對吧? –

0

所以我想通了......只需要使用eval():

for i in lst: 
    my_func(dataframe=eval(i)) 
+2

由於您使用了'eval()',甚至沒有描述它的危害,所以請注意評論的風行。不要這樣做,除非你能指定你需要的原因。 [在Python中使用eval是一個不好的做法?](http://stackoverflow.com/questions/1832940/is-using-eval-in-python-a-bad-practice) – Torxed

相關問題