Python 如何在读取数据时处理空工作表
我正在读取excel文件,但当一张工作表为空或工作表在A1处仅包含“empty”之类的字符串时,它会引发异常Python 如何在读取数据时处理空工作表,python,pandas,Python,Pandas,我正在读取excel文件,但当一张工作表为空或工作表在A1处仅包含“empty”之类的字符串时,它会引发异常 AttributeError: 'Series' object has no attribute 'iterrows' 下面是我正在使用的代码 df = pd.read_excel(excel_file, header=None, squeeze=True, sheet_name=sheet_name) for i, row in df.iterrows(): if row.n
AttributeError: 'Series' object has no attribute 'iterrows'
下面是我正在使用的代码
df = pd.read_excel(excel_file, header=None, squeeze=True, sheet_name=sheet_name)
for i, row in df.iterrows():
if row.notnull().all():
data = df.iloc[(i+1):].reset_index(drop=True)
data.columns = pd.Series(list(df.iloc[i])).str.replace(' ','_')
break
for c in data.columns:
data[c] = pd.to_numeric(data[c], errors='ignore')
如果df是空的,那么尝试遍历它是没有意义的 您可以使用
df.empty
返回True
或False
来检查数据帧是否为空,然后再对其进行迭代
编辑:通常情况下,如果工作表A1处包含“Empty”,它仍然会生成一个带有字符串“Empty”的pandas系列,我不确定这是多么pythonic,但您可以在迭代行之前将
系列
显式转换为数据帧
:
df = DataFrame(pd.read_excel(excel_file, header=None, squeeze=True, sheet_name=sheet_name))
如果read\u excel
返回一个Series
,DataFrame()
调用仍将返回一个DataFrame
。我还建议添加一个条件。例如,如果您的df
至少需要两列和一行,您可以使用:
if Len(df.columns) >= 2 and len(df) >= 1:
for i, row in df.iterrows():
if row.notnull().all():
data = df.iloc[(i+1):].reset_index(drop=True)
data.columns = pd.Series(list(df.iloc[i])).str.replace(' ','_')
break
这将防止它在df
未达到预期的情况下尝试迭代行(并修改df
)。在处理和返回df
之前,应该在代码中内置类似的内容,以便降低引入坏数据的风险