Переименование всех столбцов во фрейме данных pandas вызывает проблемы с to_sql

Я собрал около 100 фреймов данных панд из проекта очистки селена и могу успешно перебрать все файлы.pickle в папке на моей Raspberry и вставить их в MariaDB.

Проблема в том, что я допустил ошибку с именами столбцов в указанных фреймах данных, и я хотел бы очистить их, переименовав сразу все имена столбцов внутри цикла for. Я нашел очень привлекательное решение на /questions/43840282/pereimenovanie-stolbtsov-v-pandah/43840340#43840340 которое "работает", используя set_axis и список имен столбцов, на которые я хочу изменить. Однако, если я сделаю это, имена столбцов верны, но они имеют следующий формат:

('Имя_столбец',)

вместо

column_name

Это то, как я хочу их в моей базе данных MariaDB, конечно.

дела

print(df.head())

все выглядит нормально, хотя в оболочке python проблема возникает только с to_sql и именем столбца в базе данных.

Кто-нибудь может мне помочь? Пожалуйста, не будьте слишком резкими в моем коде. Я программировал Python только пару недель. Общие советы о том, как правильно структурировать этот код, чтобы сделать его быстрее, также очень ценятся:) Или комментарии о том, как поместить очищенные данные в базы данных sql в целом (я новичок в большинстве этих вещей)

Ниже приведен полный код, который компилируется и работает. Наиболее актуальная строка это:

added_df = current_df.set_axis([columns_new], axis='columns', inplace=False)

from sqlalchemy import create_engine
import pandas as pd
import glob

path = '/YOUR PATH'
main_path = 'YOUR PATH'
# Create sqlalchemy engine to connect to local server
engine = create_engine('mysql+pymysql://pi:YOUR_PASSWORD@localhost/YOURDB')

for filename in glob.iglob(path+'*.pickle'): #loops through every file in a folder
    #Clean out the unwanted parts of the file names (table names in DB)
    current_company = filename.replace(path, '')
    current_company_sql = current_company.translate( { ord(c):None for c in ' \n\t\r' } )
    current_company_sql = current_company_sql.lower()
    current_company_sql = current_company_sql.replace('ä', 'a')
    current_company_sql = current_company_sql.replace('ö', 'o')
    current_company_sql = current_company_sql.replace('(lp)', '')
    current_company_sql = current_company_sql.replace('(t)', '')

    current_df = pd.read_pickle(filename)
    #Clean out the unwanted parts of the column names
    columns_new = [] #a list of the new names i want as DB column names
    for column in current_df: #loops through every column in every dataframe
        column_edit = column.lower()
        column_edit = column_edit.translate( { ord(c):None for c in ' \n\t\r' } )
        column_edit = column_edit.replace('(p)', '_p_')
        column_edit = column_edit.replace('(b)', '_b_')
        column_edit = column_edit.replace('(e)', '_e_')
        column_edit = column_edit.replace('(ev)', '_ev_')
        column_edit = column_edit.replace('(cps)', '_cps_')
        column_edit = column_edit.replace('(eps)', '_eps_')

        columns_new.append(column_edit)

    added_df = current_df.columns(columns_new)
    added_df = current_df.set_axis([columns_new], axis='columns', inplace=False)
    print(added_df.head())

    #Transfer to database
    print('Table name of inserted data is:  '+current_company_sql.replace('.pickle', ''))
    added_df.to_sql(current_company_sql.replace('.pickle', ''), engine)

0 ответов

Другие вопросы по тегам