2016-10-18 7 views
0

連続するwhenのSQLリクエストを作成しようとしています。連続した状態を構築するとき

def build_modify_function(df, ids_colname, modified_colname, modification_list): 
if len(modification_list) == 0: 
    pass 
# Small optimization 
id_col  = df[ids_colname] 
modif_col = df[modified_colname] 
# There is no "identity element" so : 
ret = None 
for (row_ids, new_value) in modification_list: 
    if type(row_ids) != type(list()): 
     row_ids = list(row_ids) 
    if ret == None: 
     ret = when(id_col.isin(row_ids), new_value) # .isin(row_ids) 
    else: 
     ret = ret.when(id_col.isin(row_ids), new_value) 
return modif_col if ret == None else ret.otherwise(modif_col) 

df

ids_colnameは私のIDの列名で、データフレームで、

modified_colname

modification_listはタプルのリストである、私は変更したい列名です[(list_of_ids, new_value)]

私はこのエラーが発生しています:

ValueError: Cannot convert column into bool: 
please use '&' for 'and', '|' for 'or', '~' for 'not' when building DataFrame boolean expressions. 

私はその理由を理解していません。私は非常に単純な関数を返します:

tmp = when(id_col.isin(row_ids), new_value) 
return tmp\ 
    .when(id_col.isin(row_ids), new_value)\ 
    .otherwise(modif_col) 

それは完璧に動作します。助言がありますか?

答えて

0

私は問題がここにあると信じています:一般的に

if ret == None: 
    ... 

あなたはPythonでシングルトンオブジェクトに比較して、常にisまたはis notを使用する等価演算子を使用しないでください:

この中
if ret is None: 
    ... 

特定のケースの等価演算子は、ColumnおよびColumnオブジェクトを明示的にboolへの変換を禁止します。

関連する問題