Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.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动态读取Excel文件_Python_Excel_Pandas_Blank Line - Fatal编程技术网

用Python动态读取Excel文件

用Python动态读取Excel文件,python,excel,pandas,blank-line,Python,Excel,Pandas,Blank Line,我正在尝试阅读一个excel,它有一些空行和列。这个过程变得更加复杂,因为它在标题之前也有一些垃圾值 目前,我正在硬编码一个列名以提取表。这有两个缺点—如果列不在表中,以及如果列名在列值中重复,则会出现这种情况。是否有一种方法可以动态编写一个程序,自动检测表头并读取表 代码片段: raw_data = pd.read_excel('test_data1.xlsx','Sheet8',header=None) data_duplicate = pd.DataFrame() for row i

我正在尝试阅读一个excel,它有一些空行和列。这个过程变得更加复杂,因为它在标题之前也有一些垃圾值

目前,我正在硬编码一个列名以提取表。这有两个缺点—如果列不在表中,以及如果列名在列值中重复,则会出现这种情况。是否有一种方法可以动态编写一个程序,自动检测表头并读取表

代码片段:

raw_data = pd.read_excel('test_data1.xlsx','Sheet8',header=None)

data_duplicate = pd.DataFrame()

for row in range(raw_data.shape[0]): 
    for col in range(raw_data.shape[1]):
        if raw_data.iloc[row,col] == 'Currency':
            data_duplicate = raw_data.iloc[(row+1):].reset_index(drop=True)
            data_duplicate.columns = list(raw_data.iloc[row])
            break
data_duplicate.dropna(axis=1, how='all',inplace=True)
data_duplicate


此外,标题前的银行行数+垃圾行数是不固定的。

我的方法是:可以删除包含Nan的所有行和列

data = pd.read_excel('test.xlsx')
data = data.dropna(how='all', axis = 1)
data = data.dropna(how='all', axis = 0)
data = data.reset_index(drop = True)
如果需要在同一代码中打开多个数据帧,最好将其放入函数中:

data = pd.read_excel('test.xlsx')

def remove_nans(df):
    x = df.dropna(how = 'all', axis = 1)
    x = x.dropna(how = 'all', axis = 0)
    x = x.reset_index(drop = True)
    return x

df = remove_nans(data)
print(df)

您可以使用
pd.read\u excel('test\u data1.xlsx',Sheet8',skiprows=5)
。页眉前的银行行数+垃圾行数不是固定的。pyjanitor中有一个功能-remove\u empty(),它将删除所有空行和空列。或者,您可以使用df.dropna(how='all',axis=0)。dropna(how='all',axis=1)。门卫功能使它更干净。检测报头是另一回事。如果id是标题的一部分,则可以编写代码,查找具有id的第一行,并将该行分配给列。同样,看门人有一个名为row_to_names的功能,可以帮助实现这一点。试试我的建议。让我们看看它是否有效。Excel有时会令人沮丧。只是一个补充:尽可能避免重复