Фрейм данных, считанный из csv, а затем записанный в таблицу, содержит пространство для cols

#python #pandas #sqlite #csv #pandas-to-sql

Вопрос:

у меня есть случай, когда df, считанный из csv, а затем записанный в таблицу, содержит пространство для определенных cols.

вот часть csv, на которую ссылаются как на «имя файла» ниже:

 id, l, s
1,a,ay
2,b,bee
3,c,see
 

импорт и подключение к sqlite:

 import pandas as pd
import sqlite3
conn = sqlite3.connect('path_to_db')
c = conn.cursor()
 

затем при запуске этого (опущен параметр заголовка, поскольку, как я полагаю, он равен 0):

 >>> df = pd.read_csv('filename')
>>> df
  id   l    s
0  1   a   ay
1  2   b  bee
2  3   c  see
 

это та часть, в которой я надеюсь, что после вставки будет исправлено…

 >>> df.to_sql('table1', conn, if_exists='append', index=False)
 

поэтому после проверки созданной таблицы в нее было включено место для col 2-3, основанное на выполнении этого:

 >>> for items in c.execute('select * from sqlite_master where type="table" and name="table1"'):
...     print(items)
... 
('table', 'table1', 'table1', 101, 'CREATE TABLE "table1" (n"id" INTEGER,n  " l" TEXT,n  " s" TEXTn)')
 

мой вопрос: есть ли способ сказать to_sql функции, чтобы она игнорировала это?

Комментарии:

1. Обратите внимание, что в первой строке csv-файла после запятой есть пробел. проще всего было бы просто передать правильный заголовок без пробелов при чтении csv

2. Добавление в комментарий @buran, это можно сделать с помощью df = pd.read_csv('filename', names=['id', 'l', 's']) или после чтения данных с помощью df.rename(columns={' l': 'l', ' s': 's'}, inplace=True)

3. @буран, я вижу это в этом простом случае, но не для примеров десятков или сотен.

4. какие десятки и сотни?

5. @IftahP в этом чтении с именами, разве вам не нужно было бы знать это заранее, чтобы это было похоже на правильное отображение? но как насчет тех случаев, когда у одних есть пробелы, а у других нет или им нравится мой первый комментарий, когда слишком много колов, чтобы просеять