2016-06-10 16 views
0

我想確定爲什麼我的函數產生的最終值沒有被保存回到我指示熊貓建立的新列中。我已經確認if ... elif語句是正確的並且功能正確,並且我已經確認計算正在發生並生成正確的數據。我得到這個結果:數據沒有從嵌套函數傳回給熊貓

0  NaN 
1  NaN 
2  NaN 
3  NaN 
4  NaN 
5  1.0 
6  NaN 
7  1.0 
8  1.0 
9  NaN 
10 NaN 
11 NaN 
Name: Result, dtype: float64 

但是期望獲得

0.036231884058 
0.18115942029 
0.925 
0.9255 
0.962820512821 
1.0 
0.368421052632 
1.0 
1.0 
0.950125944584 
1.0 
0.950125944584 

這裏是我的代碼:

import sys 
import numpy as np 
import pandas as pd 
import scipy.stats 

df = pd.DataFrame({ 
    'Cr': [.1,.5,1,1.002,1.2,2,.79,3,3,4,400,4], 
    'De': [.1,.2,.36,.47,.5,.16,.006,.07,.107,.6,1.7,2.17] 
    }); 

def Fin_adj(row, field): 
    if field == 'Cr': 
     if row[field] <= .7: 
      Range_eval(row[field],0,.69,.0,.25) 
     elif row[field] <= .9: 
      Range_eval(row[field],.7,.89,.25,.5) 
     elif row[field] <= 1.1: 
      Range_eval(row[field],.9,1.10,.9,.95) 
     elif row[field] <= 1.5: 
      Range_eval(row[field],1.1,1.49,.95,1) 
     elif row[field] <= 3: 
      return 1 
     else: 
      Range_eval(row[field],3,data[field].max(),.95,1) 

def Range_eval (val_in, Oldmin, Oldmax, Newmin, Newmax): 
    (((val_in - Oldmin) * (Newmax - Newmin))/(Oldmax - Oldmin)) + Newmin 



df['Result'] = df.apply(Fin_adj, args=('Cr',), axis=1) 

回答

0

你忘了一些return陳述

def Fin_adj(row, field): 
    if field == 'Cr': 
     if row[field] <= .7: 
      return Range_eval(row[field],0.,.69,.0,.25) 
     elif row[field] <= .9: 
      return Range_eval(row[field],.7,.89,.25,.5) 
     elif row[field] <= 1.1: 
      return Range_eval(row[field],.9,1.10,.9,.95) 
     elif row[field] <= 1.5: 
      return Range_eval(row[field],1.1,1.49,.95,1) 
     elif row[field] <= 3.: 
      return 1 
     else: 
      return Range_eval(row[field],3.,df[field].max(),.95,1) 

def Range_eval (val_in, Oldmin, Oldmax, Newmin, Newmax): 
    return (((val_in - Oldmin) * (Newmax - Newmin))/(Oldmax - Oldmin)) + Newmin 
+0

哇,謝謝你Alex。我覺得自己像一個白癡,我可以發誓,我嘗試了和不。我想我在測試Range_eval的時候必須回覆Range_eval。 – Vexiis

+0

我們在這裏學習。你會記得'返回'確實足夠! ;-) –