You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将Pandas DataFrame保存为CSV时触发're.error: multiple repeat at position 2'错误的求助

将Pandas DataFrame保存为CSV时触发're.error: multiple repeat at position 2'错误的求助

问题描述

以下是我编写的代码,它在处理database字典里的ai: df_ai时出现了错误:

import pandas as pd  # 补充原代码遗漏的导入

data = pd.read_csv('survey_results_public.csv')

df_demographics = data[['ResponseId', 'MainBranch', 'Age', 'Employment', 'EdLevel', 'YearsCode', 'Country']]

df_learn_code = data[['ResponseId', 'LearnCode']]

df_language = data[['ResponseId', 'LanguageAdmired']]

df_ai = data[['ResponseId', 'AISelect', 'AISent', 'AIAcc', 'AIComplex', 'AIThreat', 'AIBen', 'AIToolCurrently Using']]

database = {'demographics': df_demographics, 'learn_code': df_learn_code, 'language': df_language, 'ai': df_ai}

def find_semicolons(dataframe):
    result = []

    firstFifty = dataframe.head(50)

    for column in firstFifty.columns:
        if firstFifty[column].apply(lambda x: ';' in str(x)).any():
            result.append(column)

    return result


def transform_dataframe(dataframe):
    result = find_semicolons(dataframe)

    for column in result:
        values = [str(x).split(';') for x in dataframe[column].unique().tolist()]
        flat_values = []
        for x in values:
            flat_values.extend(x)
        flat_values = set(flat_values)
        for x in flat_values:
            dataframe[x] = dataframe[column].str.contains(x, na=False).astype(int)


for x in database:
    transform_dataframe(database.get(x))
    database.get(x).to_csv(x + '.csv')

报错信息

Traceback (most recent call last):
  File "/Users/shalim/PycharmProjects/work/stackoverflow.py", line 45, in <module>
    transform_dataframe(database.get(x))
  File "/Users/shalim/PycharmProjects/work/stackoverflow.py", line 40, in transform_dataframe
    dataframe[x] = dataframe[column].str.contains(x, na=False).astype(int)
  File "/Users/shalim/PycharmProjects/work/venv/lib/python3.9/site-packages/pandas/core/strings/accessor.py", line 137, in wrapper
    return func(self, *args, **kwargs)
  File "/Users/shalim/PycharmProjects/work/venv/lib/python3.9/site-packages/pandas/core/strings/accessor.py", line 1327, in contains
    if regex and re.compile(pat).groups:
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/re.py", line 252, in compile
    return _compile(pattern, flags)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/re.py", line 304, in _compile
    p = sre_compile.compile(pattern, flags)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/sre_compile.py", line 764, in compile
    p = sre_parse.parse(p, flags)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/sre_parse.py", line 948, in parse
    p = _parse_sub(source, state, flags & SRE_FLAG_VERBOSE, 0)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/sre_parse.py", line 443, in _parse_sub
    itemsappend(_parse(source, state, verbose, nested + 1,
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/sre_parse.py", line 671, in _parse
    raise source.error("multiple repeat",
re.error: multiple repeat at position 2

问题分析与解决方案

嘿,这个问题我熟!核心原因很明确:Pandas的str.contains()默认会把搜索字符串当作正则表达式解析,而你的AI相关数据里肯定存在正则特殊字符(比如+、*这类重复量词,比如某个AI工具名称可能是GPT-4+,里面的+就是正则里的重复符号)。当str.contains()尝试把这些字符当作正则语法解析时,就会因为语法错误抛出re.error: multiple repeat。

关键修改

你只需要在transform_dataframe函数里的str.contains()调用中添加regex=False参数,强制它按字面文本匹配,而不是正则表达式:

修改这一行:

dataframe[x] = dataframe[column].str.contains(x, na=False).astype(int)

为:

dataframe[x] = dataframe[column].str.contains(x, na=False, regex=False).astype(int)

额外优化建议

另外,我注意到你在find_semicolons函数里只检查了前50行数据是否有分号,这可能会漏过后面行中包含分号的列。如果你的数据存在这种情况,建议去掉head(50)的限制,直接用整个DataFrame来检查:

def find_semicolons(dataframe):
    result = []
    # 去掉head(50),检查所有行的分号情况
    for column in dataframe.columns:
        if dataframe[column].apply(lambda x: ';' in str(x)).any():
            result.append(column)
    return result

修改后的完整transform_dataframe函数

def transform_dataframe(dataframe):
    result = find_semicolons(dataframe)

    for column in result:
        values = [str(x).split(';') for x in dataframe[column].unique().tolist()]
        flat_values = []
        for x in values:
            flat_values.extend(x)
        flat_values = set(flat_values)
        for x in flat_values:
            # 新增regex=False参数,避免正则解析错误
            dataframe[x] = dataframe[column].str.contains(x, na=False, regex=False).astype(int)

这样修改后,你的代码就能顺利处理所有DataFrame包括ai对应的df_ai了,不会再触发正则解析的错误。


备注:内容来源于stack exchange,提问作者m. lekk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 14:23:08