Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在读取数据时处理空工作表_Python_Pandas - Fatal编程技术网

Python 如何在读取数据时处理空工作表

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

我正在读取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.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
之前,应该在代码中内置类似的内容,以便降低引入坏数据的风险