如何用if/else或try/except处理空CSV读取生成DataFrame
解决空CSV文件读取为空DataFrame的问题
你的问题出在使用了无差别捕获所有异常的裸except,这会导致任何读取错误(比如文件路径错误、编码问题)都被捕获并返回空DataFrame,同时还没处理「有表头但无数据行」的情况——这种场景下pd.read_csv不会抛出异常,但返回的DataFrame本身是空的。
以下是针对性的解决方案:
方案1:捕获特定异常+判断DataFrame是否为空
import pandas as pd from pandas.errors import EmptyDataError try: # 尝试读取CSV文件 new_df = pd.read_csv(file_name) # 可选:如果需要把「有表头但无数据」的情况也转为纯空DataFrame if new_df.empty: new_df = pd.DataFrame() except EmptyDataError: # 处理完全空的文件(连表头都没有) new_df = pd.DataFrame() except FileNotFoundError: # 可选:处理文件不存在的场景 new_df = pd.DataFrame()
关键说明:
- 捕获特定异常:只捕获
EmptyDataError(pandas读取完全空文件时抛出的异常)和FileNotFoundError(文件不存在时的异常),避免误捕获其他无关错误(比如编码错误、权限问题)。 - 判断
new_df.empty:如果你的「空文件」指的是有表头但没有数据行,pd.read_csv不会报错,但返回的DataFrame满足empty=True,此时可以根据需求转为纯空DataFrame,或者保留表头结构。
原代码失效原因:
裸except会捕获所有类型的异常,比如如果你的非空文件存在编码问题、路径拼写错误,都会进入except分支返回空DataFrame,让你误以为无论文件是否为空都返回空值。指定特定异常后,只有真正的空文件/文件不存在场景才会触发空DataFrame的赋值。
内容的提问来源于stack exchange,提问作者codingrainha
相关产品推荐
相关产品推荐

