2016-12-15 7 views
0

Ich versuche mit Pandas an einem Data Science Problem zu arbeiten. Mein Datensatz enthält die Spalten "Land", "Konvertierung", "Test", "Benutzer-ID" usw. In der Länderspalte gibt es etwa 10 Länder. Die "Test" -Spalte hat die Werte 0 und 1, die zwei Arten von Tests bezeichnen: Kontrolle für 0 und Experiment für 1. "Umwandlung" hat auch Werte 0 und 1, die angeben, ob die Person konvertiert wurde oder nicht.TypeError: kann 'str' und 'float' Objekte nicht verketten: pandas

Ich möchte groupby Land und berechnen p-Wert und Mittelwert von test == 0 und test == 1 für jede Gruppe. Ich versuche, die folgende Funktion zu verwenden, jedoch löst es einen Fehler aus "TypeError: kann 'str' und 'float' Objekte nicht verketten". Kann jemand bitte Licht darauf werfen?

def f(x): 
     control = x.loc[(x.test==0)] 
     test = x.loc[(x.test==1)] 
     p_value = stats.ttest_ind(control,test)[0] 
     control_mean = control['conversion'].mean() 
     test_mean = test['conversion'].mean() 
     return pd.Series({'p_value': p_value, 'conversion_test': test_mean, 'conversion_control': control_mean})  

bycountry = data1.groupby('country').apply(f) 
bycountry = bycountry.reset_index(level='None') 
bycountry 

komplette Fehlermeldung:

TypeError         Traceback (most recent call last) 
<ipython-input-495-bd6227878520> in <module>() 
     7  return pd.Series({'p_value': p_value, 'conversion_test': test_mean, 'conversion_control': control_mean}) 
     8 
----> 9 bycountry = data1.groupby("country").apply(f) 
    10 bycountry = bycountry.reset_index(level='None') 
    11 bycountry 

C:\Users\SnehaPriya\Anaconda2\lib\site-packages\pandas\core\groupby.pyc in apply(self, func, *args, **kwargs) 
    649   # ignore SettingWithCopy here in case the user mutates 
    650   with option_context('mode.chained_assignment', None): 
--> 651    return self._python_apply_general(f) 
    652 
    653  def _python_apply_general(self, f): 

C:\Users\SnehaPriya\Anaconda2\lib\site-packages\pandas\core\groupby.pyc in _python_apply_general(self, f) 
    653  def _python_apply_general(self, f): 
    654   keys, values, mutated = self.grouper.apply(f, self._selected_obj, 
--> 655             self.axis) 
    656 
    657   return self._wrap_applied_output(

C:\Users\SnehaPriya\Anaconda2\lib\site-packages\pandas\core\groupby.pyc in apply(self, f, data, axis) 
    1525    # group might be modified 
    1526    group_axes = _get_axes(group) 
-> 1527    res = f(group) 
    1528    if not _is_indexed_like(res, group_axes): 
    1529     mutated = True 

C:\Users\SnehaPriya\Anaconda2\lib\site-packages\pandas\core\groupby.pyc in f(g) 
    645   @wraps(func) 
    646   def f(g): 
--> 647    return func(g, *args, **kwargs) 
    648 
    649   # ignore SettingWithCopy here in case the user mutates 

<ipython-input-495-bd6227878520> in f(x) 
     2  control = x.loc[(x.test==0)] 
     3  test = x.loc[(x.test==1)] 
----> 4  p_value = stats.ttest_ind(control,test)[0] 
     5  control_mean = control['conversion'].mean() 
     6  test_mean = test['conversion'].mean() 

C:\Users\SnehaPriya\Anaconda2\lib\site-packages\scipy\stats\stats.pyc in ttest_ind(a, b, axis, equal_var, nan_policy) 
    3865   return Ttest_indResult(np.nan, np.nan) 
    3866 
-> 3867  v1 = np.var(a, axis, ddof=1) 
    3868  v2 = np.var(b, axis, ddof=1) 
    3869  n1 = a.shape[axis] 

C:\Users\SnehaPriya\Anaconda2\lib\site-packages\numpy\core\fromnumeric.pyc in var(a, axis, dtype, out, ddof, keepdims) 
    3098 
    3099  return _methods._var(a, axis=axis, dtype=dtype, out=out, ddof=ddof, 
-> 3100       keepdims=keepdims) 

C:\Users\SnehaPriya\Anaconda2\lib\site-packages\numpy\core\_methods.pyc in _var(a, axis, dtype, out, ddof, keepdims) 
    89  # Note that if dtype is not of inexact type then arraymean will 
    90  # not be either. 
---> 91  arrmean = umr_sum(arr, axis, dtype, keepdims=True) 
    92  if isinstance(arrmean, mu.ndarray): 
    93   arrmean = um.true_divide(

TypeError: cannot concatenate 'str' and 'float' objects 

Ausgabe von df.dtypes:

user_id      int64 
date    datetime64[ns] 
source      object 
device      object 
browser_language   object 
ads_channel     object 
browser      object 
conversion     int64 
test       int64 
sex       object 
age      float64 
country      object 
dtype: object 
+0

Veröffentlichen Sie die vollständige Stack-Trace –

+0

Ich vermute, was passiert ist, dass Sie eine Spalte des Typs 'Obj' mit gemischten' float' und 'string' Werten haben. –

+0

@ juanpa.arrivillaga: Ich habe die vollständige Fehlermeldung gepostet. – Gingerbread

Antwort

0
def f(x): 
    control = x.loc[(x.test==0)] 
    control = control['conversion'] 
    test = x.loc[(x.test==1)] 
    test = test['conversion'] 
    p_value = stats.ttest_ind(control,test)[0] 
    control_mean = control.mean() 
    test_mean = test.mean() 
    return pd.Series({'p_value': p_value, 'conversion_test': test_mean, 'conversion_control': control_mean})  

Dies hat den Trick !! Vielen Dank nochmal @ juanpa.arrivillaga !!

Verwandte Themen