如何解决pd.read_csv读取CSV文件时的UTF-8编码错误?
解决pd.read_csv读取CSV时的Unicode编码错误
问题描述
读取main_genre.csv时触发编码错误,报错信息:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8e in position 1524: invalid start byte
核心原因是该CSV文件并非UTF-8编码,需指定对应编码格式才能正常读取。
解决方案
1. 尝试常见编码格式
针对报错中的0x8e字节,优先测试以下几种常用编码:
- Windows默认ANSI编码(cp1252):
main_genre_df = pd.read_csv('main_genre.csv', encoding='cp1252') - 韩文编码(euc-kr):
main_genre_df = pd.read_csv('main_genre.csv', encoding='euc-kr') - 中文GBK编码:
main_genre_df = pd.read_csv('main_genre.csv', encoding='gbk')
2. 自动检测文件编码(推荐)
如果不确定具体编码,用chardet库自动识别:
- 安装chardet:
pip install chardet - 检测编码并读取的完整修改代码:
import chardet import pandas as pd def task5(): # 检测main_genre.csv的编码 with open('main_genre.csv', 'rb') as f: encoding_result = chardet.detect(f.read()) # 使用检测到的编码读取文件 main_genre_df = pd.read_csv('main_genre.csv', encoding=encoding_result['encoding']) movies_df = pd.read_csv('movies.csv') # 若movies.csv也有编码问题,重复上述检测步骤 for genre in main_genre_df.columns: # 过滤空值,避免字符串拼接出错 terms = [term.lower() for term in main_genre_df[genre].tolist() if pd.notna(term)] if not terms: print(f"{genre}: 无匹配关键词") continue # 筛选包含关键词的电影,忽略空剧情 selected_movies = movies_df[movies_df['Synopsis'].str.lower().str.contains('|'.join(terms), na=False)] if not selected_movies.empty: most_frequent_genre = selected_movies['main_Genre'].value_counts().idxmax() print(f"{genre}: {most_frequent_genre}") else: print(f"{genre}: 无匹配电影")
3. 临时跳过错误(不推荐)
仅用于临时调试,添加errors='replace'可跳过无法解码的字符(会丢失部分内容):
main_genre_df = pd.read_csv('main_genre.csv', errors='replace')
注意事项
- 若
movies.csv也出现编码错误,同样用上述方法检测并指定编码。 - 处理空值可避免
str.contains触发报错,提升代码稳定性。
内容的提问来源于stack exchange,提问作者Martin Swift
相关产品推荐
相关产品推荐

