【问题标题】:Problem Importing to MYSQL with Pandas: UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-7: character maps to <undefined>使用 Pandas 导入 MYSQL 时出现问题:UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-7: character maps to <undefined>
【发布时间】:2021-07-08 10:52:45
【问题描述】:

我正在尝试使用 pandas to_sql 一次将数据框中的多个 csv 导入 MySQL 数据库。创建引擎后,我正在运行以下命令:

folder_path = (file_path)
os.chdir(folder_path)
for file in os.listdir(folder_path):
    if '.csv' in file:
        df = pd.read_csv(file, low_memory = False)
        table_name = str(file.strip('.csv'))
        df.to_sql(table_name, con = engine, if_exists = 'replace')

但是,当我运行代码时,我收到以下错误: "UnicodeEncodeError: 'charmap' 编解码器无法对位置 0-7 中的字符进行编码:字符映射到 "

即使我尝试使用导入向导来加载出现错误的特定表,它也只导入了 42,000 条记录中的 50 条。

感谢任何帮助!

【问题讨论】:

  • 你能分享一个你的 csv 数据样本吗?我的假设是,没有太多信息,这可能与您的 CSV 数据在文件中的方式有​​关。检查CSV的第49、50和51行
  • 数据来自这个 kaggle 数据集:kaggle.com/mrmorj/dataset-of-songs-in-spotify。第一个文件genres-v2 出现错误。我看到肯定有一些行不包含 UTF-8,但它们不在 50 左右。关于如何在导入之前快速删除所有包含非 utf-8 字符的行的任何建议?
  • 总是指定编码(例如read_csv)。不要相信 Python 会为你找到它(不幸的是,Windows 仍然使用不可预测的默认值)
  • @shuaf98 你用的是哪个文件?你需要给我更多的东西才能帮助我:)
  • Rui,该文件是我发布的 kaggle 链接上的genres_v2 文件。 Giacoma,编码目前指定为 UTF-8。是否有不同的编码可以代替?

标签: python mysql sql pandas unicode


【解决方案1】:

我不确定这是否是“正确”的做法,但我发现了一个正则表达式,它只选择 UTF-8 中的字符,删除其余字符,用于数据帧中的每个字段:

df.replace({r'[^\x00-\x7F]+':''}, regex=True, inplace=True)

不过,如果有其他解决方案,我希望保留非 UTF-8 字符。

【讨论】:

    猜你喜欢
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 2020-08-05
    • 2018-04-18
    • 2014-09-27
    相关资源
    最近更新 更多