вырезание имени столбца из каждой строки заголовка на листе Excel и зацикливание на имени листа в pandas

#python #excel #pandas #slice

#python #excel #pandas #срез

Вопрос:

Я пытаюсь вставить данные из файла Excel, который содержит несколько листов, при этом для каждого имени листа в базе данных существует соответствующая таблица. Теперь я подумал, что подход заключается в том, чтобы выполнить цикл по имени листа и создать рекурсивный SQL в цикле, который подходит для всех имен листов. Теперь в цикле предположим, что сначала появляется имя листа, затем выполняется несколько проверок, которые проверяют, существует ли таблица в базе данных или нет, и проверяют имя столбца на листе, а также имя столбца из базы данных. если все в порядке, то данные листа будут вставлены в базу данных.

Проблемы, с которыми я сталкиваюсь::

1 — Получить имя листа из pandas

         xls = pd.ExcelFile<filepath>
        Sheet_name = x.sheet_names

I am not able to loop through it although it contains all the sheet name but for() is not working.
Help me with a iteration code.
  

2 — Помогите мне вырезать имя столбца из строки заголовка каждого листа, чтобы подтвердить имя столбца.

 I am placing a few piece of code that i have been working on, help me with syntax error's as well

Their are errors in SQL code as well Please help me with them also
  

Код:

 import pandas as pd
Import the oracle lib

Create -----> DB_Connection 
mycursor = DB_Connection.cursor()
xls = pd.ExcelFile('File Path')
SheetNames = xls.sheet_names

for i in SheetNames:
    SelectSql = "SELECT TABLE_NAME FROM all_tab_columns where OWNER = 'XYZZZ' and TABLE_NAME = '"i"' "
    mycursor.execute(SelectSql)
    QueryResult = mycursor.fethcone()

if(pd.isnull(QueryResult)):
    Print("Table doesn't exist in database")
else:
    """    Add the Data frame slicing code to get Column name's to Check if same Exist in Database or Not    """
    
    GetColumnSql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '"i"' ORDER BY ORDINAL_POSITION"
    mycursor.execute(GetColumnSql)
    ColumnName = mycursor.fetchall()
    
    InsertSql = "INSERT INTO '"i"'('"ColumnName"') VALUES(%s,%s,%s,%s,%s)"
    VAL0 = """  insert from dataframe  """
    mycursor.execute(InsertSql,VAL0)
    
    DB_Connection.commit();        
  

Ответ №1:

Относительно 1)

sheet_name Параметр read_excel функции может быть None . При этом возвращаемым значением будет не фрейм данных pandas, а словарь. Его ключами будут имена листов и значения самих фреймов данных.

Затем вы можете выполнить итерацию по этому словарю и выполнить проверку.