没有使用re.findall获得正确的输出

时间:2016-03-21 13:30:20

标签: python regex csv findall

我试图用pandas(df_input)编写一个读取输入csv文件的代码,然后在列表中出现任何变量时使用re.findall。此列表是从另一个.csv文件导入的,其中列[0](df_expression)包含我希望代码搜索的变量,列[1](df_translation)包含我希望代码在返回时返回的值。完全符合。这样,当我搜索像勃艮第'和'栗色'它被翻译成红色'。我一直在尝试这个设置,所以我可以在我的表达式翻译中进行更改,而无需更改代码本身。

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'], .....

在df_input.to_csv(filepath + filename)之后的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'] 

首选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() - 没有工作,也没有在我的re.findall和其他一些东西的末尾添加[0]。似乎只做str的工作是str(resultlist).replace(),但是索引匹配组合非常混乱。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

尝试以下更改并查看其行为。

替换

df_input['Color'] = resultless

使用

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

这应该将无结果变为['Black', 'White', 'Blue', 'Red, Black', 'Pink', ...]