2015-03-31 132 views
2

我正在做探索性的數據分析,同時這樣做我使用相同的代碼行很多次。所以我才知道,爲什麼我不能寫這個函數。但我是新來的蟒蛇我不知道如何定義一個函數exactly.So請幫我.....如何在python中編寫函數?

的TextData是我的主要數據框和tonumber,smstext是我的變量

# subsetting the textdata 
mesbytonum = textdata[['tonumber', 'smstext']] 
# calculating the no.of messages by tonumber 
messbytonum_freq = mesbytonum.groupby('tonumber').agg(len) 
# resetting the index 
messbytonum_freq.reset_index(inplace=True) 
# making them in a descending order 
messbytonum_freq_result = messbytonum_freq.sort(['smstext'], ascending=[0]) 
#calcuating percentages 
messbytonum_freq_result['percentage'] = messbytonum_freq_result['smstext']/sum(messbytonum_freq_result['smstext']) 
# considering top10 
top10tonum = messbytonum_freq_result.head(10) 
# top10tonum 

我已經重複了類似的那種碼20左右次,所以我想寫上面的代碼,使我的代碼更小的功能。所以請幫助我如何定義。

在此先感謝

+0

[檢查這個(https://docs.python.org/2/tutorial/controlflow.html#defining-functions) – 2015-03-31 15:16:50

+0

http://stackoverflow.com/questions/14012076/how-to-write-a-function-that-returns-a-function-in-python – Jonathan 2015-03-31 15:26:02

回答

4

函數的定義如下:

def func(arg1, arg2, argN): 
    # do something 
    # you may need to return value(s) too 

而且這樣調用:

func(1,2,3) # you can use anything instead of 1,2 and 3 

這將是

def MyFunc(textdata): 
    mesbytonum = textdata[['tonumber', 'smstext']] 
    messbytonum_freq = mesbytonum.groupby('tonumber').agg(len) 
    messbytonum_freq.reset_index(inplace=True) 
    messbytonum_freq_result = messbytonum_freq.sort(['smstext'], ascending=[0]) 
    messbytonum_freq_result['percentage'] = messbytonum_freq_result['smstext']/sum(messbytonum_freq_result['smstext']) 
    top10tonum = messbytonum_freq_result.head(10) 
    return # what do you want to return? 

# use this function 
result=MyFunc(<argument here>) 

# then you need to use result somehow 

你的功能也返回乘積樂值

return spam, egg 

,你必須使用這樣

mySpam, myEgg=MyFunction(<argument>) 
+0

要完成,您將通過調用result = MyFunc得到結果( )。結果將被設置爲等於函數中返回*之後的任何值。 – 2015-03-31 15:26:11

+0

@Alecg_O,謝謝,我編輯了答案。 – ForceBru 2015-03-31 15:28:11

+0

你正在使用((mesbytonum = textdata [[''tonumber','smstext']]))命令內的函數,有時我的變量是不同的,如果我直接給它的數據,它總是會計算operator.so請以這種方式幫助我。如果可以,請編輯您給出的答案。非常感謝你 。 – suri1617 2015-03-31 15:41:20