re.findall 没有得到正确的输出
Not getting the proper output with re.findall
我正在尝试编写一个代码,用 pandas (df_input) 读取我的输入 csv 文件,然后对列表中出现的任何变量使用 re.findall。此列表是从另一个 .csv 文件导入的,其中列 [0] (df_expression) 包含我希望代码搜索的变量,列 [1] (df_translation) 包含我希望代码搜索的值return 完全匹配时。这样,当我搜索像 'burgundy' 和 'maroon' 这样的颜色时,它会被翻译成 'red'。我一直在尝试这种设置,这样我就可以在不更改代码本身的情况下更改我的表达式翻译。
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
这些是 return 值:
resultlist
[['Black'], ['White'], ['Blue'], ['Red', 'Black'], ['Pink'], .....
在 df_input.to_csv(文件路径+文件名):
之后在我的 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(resultlist).replace(),但是索引匹配组合非常混乱。有什么建议吗?
尝试进行以下更改,看看效果如何。
替换
df_input['Color'] = resultless
有
df_input['Color'] = [', '.join(c) for c in resultlist]
这应该将 resultless 转换为 ['Black', 'White', 'Blue', 'Red, Black', 'Pink', ...]
我正在尝试编写一个代码,用 pandas (df_input) 读取我的输入 csv 文件,然后对列表中出现的任何变量使用 re.findall。此列表是从另一个 .csv 文件导入的,其中列 [0] (df_expression) 包含我希望代码搜索的变量,列 [1] (df_translation) 包含我希望代码搜索的值return 完全匹配时。这样,当我搜索像 'burgundy' 和 'maroon' 这样的颜色时,它会被翻译成 'red'。我一直在尝试这种设置,这样我就可以在不更改代码本身的情况下更改我的表达式翻译。
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
这些是 return 值:
resultlist
[['Black'], ['White'], ['Blue'], ['Red', 'Black'], ['Pink'], .....
在 df_input.to_csv(文件路径+文件名):
之后在我的 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(resultlist).replace(),但是索引匹配组合非常混乱。有什么建议吗?
尝试进行以下更改,看看效果如何。
替换
df_input['Color'] = resultless
有
df_input['Color'] = [', '.join(c) for c in resultlist]
这应该将 resultless 转换为 ['Black', 'White', 'Blue', 'Red, Black', 'Pink', ...]