Импортируя CSV в SQL с Pandas, как мне игнорировать пустые строки? - PullRequest
0 голосов
/ 17 июня 2020

Все еще учусь Python, так что несите меня. Я использую следующий сценарий для импорта файла csv в локальную базу данных SQL. Моя проблема в том, что файл csv обычно имеет кучу пустых строк в конце, и я получаю ошибки первичного ключа при импорте. Как лучше всего с этим справиться? Если я вручную отредактирую csv в текстовом редакторе, я могу удалить все строки ,,,,,,,,,,,,,,,,,,,,,,,,, и он отлично работает.

Дополнительный вопрос , есть ли простой способ перебрать все файлы .csv в каталоге, а затем удалить или переместить их после обработки?

import pandas as pd

data = pd.read_csv (r'C:\Bookings.csv')
df = pd.DataFrame(data, columns= ['BookingKey','BusinessUnit','BusinessUnitKey','DateTime','Number','Reference','ExternalId','AmountTax','AmountTotal','AmountPaid','AmountOpen','AmountTotalExcludingTax','BookingFee','MerchantFee','ProcessorFee','NumberOfPersons','Status','StatusDateTime','StartTime','EndTime','PlannedCheckinTime','ActualCheckinTime','Attendance','AttendanceDatetime','OnlineBookingCheckedDatetime','Origin','CustomerKey'])
df = df.fillna(value=0)
print(df)

import pyodbc

conn = pyodbc.connect('Driver={SQL Server};'
                      'Server=D3VBUP\SQLEXPRESS;'
                      'Database=BRIQBI;'
                      'Trusted_Connection=yes;')
cursor = conn.cursor()

for row in df.itertuples():
    cursor.execute('''
                INSERT INTO BRIQBI.dbo.Bookings (BookingKey,BusinessUnit,BusinessUnitKey,DateTime,Number,Reference,ExternalId,AmountTax,AmountTotal,AmountPaid,AmountOpen,AmountTotalExcludingTax,BookingFee,MerchantFee,ProcessorFee,NumberOfPersons,Status,StatusDateTime,StartTime,EndTime,PlannedCheckinTime,ActualCheckinTime,Attendance,AttendanceDatetime,OnlineBookingCheckedDatetime,Origin,CustomerKey)
                VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
                ''',
                row.BookingKey,
                row.BusinessUnit,
                row.BusinessUnitKey,
                row.DateTime,
                row.Number,
                row.Reference,
                row.ExternalId,
                row.AmountTax,
                row.AmountTotal,
                row.AmountPaid,
                row.AmountOpen,
                row.AmountTotalExcludingTax,
                row.BookingFee,
                row.MerchantFee,
                row.ProcessorFee,
                row.NumberOfPersons,
                row.Status,
                row.StatusDateTime,
                row.StartTime,
                row.EndTime,
                row.PlannedCheckinTime,
                row.ActualCheckinTime,
                row.Attendance,
                row.AttendanceDatetime,
                row.OnlineBookingCheckedDatetime,
                row.Origin,
                row.CustomerKey
                )
conn.commit()

1 Ответ

0 голосов
/ 17 июня 2020

Закончилось очень легко. Я добавил функцию dropna, чтобы все строки данных, в которых не было данных, были удалены.

df = df.dropna (how = 'all')

Теперь прочь, чтобы узнать как перебрать несколько файлов в каталоге и переместить их в другое место.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...