2016-03-21 7 views
0

Я пытаюсь написать код, который читает мой входной файл csv с помощью pandas (df_input), а затем использует re.findall для любого вхождения переменных в список. Этот список импортируется из другого CSV-файла, где столбец [0] (df_expression) содержит переменные, которые я хочу, чтобы код искал, а столбец [1] (df_translation) содержит значения, которые я хочу вернуть код, когда есть точное совпадение. Таким образом, когда я ищу цвета, такие как «бордовый» и «бордовый», он переводится на «красный». Я пробовал эту настройку, поэтому я могу вносить изменения в мои переводы выражений, не меняя сам код.Не получать правильный вывод с re.findall

df_name = df_input[0] 

def expression(expr, string): 
    return True if len(re.findall(r'\b' + expr + r'\b', string, re.I)) > 0 else False 

resultlist = [] 
    for lineIndex in range(0, len(df_input)): 
     matches_list = [] 
     for expIndex in range(0, len(df_expressions)): 
      if expression(str(df_expressions.ix[expIndex]), str(df_name.ix[lineIndex])): 
       matches_list.append(df_translation.ix[expIndex]) 

df_input['Color'] = resultlist 

Эти возвращаемые значения:

resultlist 
[['Black'], ['White'], ['Blue'], ['Red', 'Black'], ['Pink'], ..... 

Выходной ток, как найти в моем output.csv после df_input.to_csv (FilePath + имя файла):

Name,Color 
a black car,['Black'] 
a white paper,['White'] 
the sky is blue,['Blue'] 
this product is burgundy and black,['Red, Black'] 
just pink,['Pink'] 

Preferred output.csv :

Name,Color 
a black car,Black 
a white paper,White 
the sky is blue,Blue 
this product is burgundy and black,Red;Black 
just pink,Pink 

Можно ли потерять скобки и кавычки, поэтому всякий раз, когда я делаю df_input.to_csv (filepath + filename), я получаю чистый вывод? Я пробовал df.replace() - не работает, не добавляет [0] в конец моего re.findall и кучу других вещей. Единственное, что, похоже, выполняет эту работу, - это str (resultlist) .replace(), но тогда комбинация индекса и совпадения довольно запутана. Какие-либо предложения?

+0

Пожалуйста, пост работоспособный код. Не просто фрагмент. – Saleem

ответ

0

Попробуйте изменить настройки и посмотрите, как они себя ведут.

Заменить

df_input['Color'] = resultless 

С

df_input['Color'] = [', '.join(c) for c in resultlist] 

Это должно превратить resultless в ['Black', 'White', 'Blue', 'Red, Black', 'Pink', ...]

 Смежные вопросы

  • Нет связанных вопросов^_^