Pandas импорт не вставляет все строки -- mysql поле с участием python-3.x поле с участием pandas поле с участием csv пол Связанный проблема

Pandas Import not Inserting All Rows


0
vote

проблема

русский

Я импортирую файл .csv с 3300 рядами данных через следующее:

 <код> kendo0  

После успешного импорта я делаю запрос «Выбрать * из ...» на моем столе, который возвращает 3100 строк, так где же отсутствуют 200 строк?

Я предполагаю, что есть коррумпированные данные, которые нельзя прочитать, что я добавляю, затем пропущена Pands. Однако нет предупреждения, журнала или сообщения, чтобы явно сказать это. Сценарий выполняется как обычно.

У кого-то испытал похожие проблемы, или мне не хватает чего-то совершенно очевидного?

Английский оригинал

I am importing a .csv file with 3300 rows of data via the following:

myCSVfile = pd.read_csv(csv_file) myCSVfile.to_sql(con=engine, name='foo', if_exists='replace') 

Once successfully imported, I do a "select * from ..." query on my table, which returns 3100 rows, so where are the missing 200 rows?

I am assuming there is corrupt data which cannot be read in, which I further assume is then skipped over by pandas. However there is no warning, log or message to explicitly say so. The script executes as normal.

Has anyone experienced similar problems, or am I missing something completely obvious?

</div
           
         
         

Список ответов

1
 
vote

Хотя вопрос не указывает <код> engine , давайте предположим, что это <код> sqlite3 .

Следуйте повторно Runnable Code показывает, что dataframe.to_sql () создает <код> sqlite3 таблица и помещает на него индекс. Какие данные из индекса DataFrame.

Принимая код вопроса буквально, CSV должен импортировать в dataframe с <код> RangeIndex , который будет уникальными орналами. Из-за этого следует удивить, если количество строк в CSV не соответствует количеству строк, загруженных в <код> sqlite3 таблицы.

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

Однако, какой <код> DataFrame.to_sql() должен быть исключен. И для этого, <код> method можно пропущено. Его можно использовать для того, чтобы увидеть, что <код> DataFrame.to_sql() делает с данными dataframe перед передачей его в SQL <код> engine / код>.

 <код> import csv import pandas as pd import sqlite3  def dump_foo(conn):     cur = conn.cursor()     cur.execute("SELECT * FROM foo")     rows = cur.fetchall()     for row in rows:         print(row)  conn = sqlite3.connect('example145.db')  csv_data = """1,01-01-2019,724 2,01-01-2019,233,436 3,01-01-2019,345 4,01-01-2019,803,933,943,923,954 4,01-01-2019,803,933,943,923,954 4,01-01-2019,803,933,943,923,954 4,01-01-2019,803,933,943,923,954 4,01-01-2019,803,933,943,923,954 5,01-01-2019,454 5,01-01-2019,454 5,01-01-2019,454 5,01-01-2019,454 5,01-01-2019,454"""  with open('test145.csv', 'w') as f:     f.write(csv_data)  with open('test145.csv') as csvfile:     data = [row for row in csv.reader(csvfile)] df = pd.DataFrame(data = data)  def checkit(table, conn, keys, data_iter):     print "What pandas wants to put into sqlite3"     for row in data_iter:         print(row)  # note, if_exists replaces the table and does not affect the data df.to_sql('foo', conn, if_exists="replace", method=checkit) df.to_sql('foo', conn, if_exists="replace") print "*** What went into sqlite3" dump_foo(conn)   
 

Although the question does not specify engine, let's assume it is sqlite3.

The follow re-runnable code shows that DataFrame.to_sql() creates a sqlite3 table, and places an index on it. Which is the data from the index of the dataframe.

Taking the question code literally, the csv should import into the DataFrame with a RangeIndex which will be unique ordinals. Because of this, one should be surprised if the number of rows in the csv do not match the number of rows loaded into the sqlite3 table.

So there are two things to do: Verify that the csv is being imported correctly. This is likely the problem since poorly formatted csv files, originating from human manipulated spreadsheets, frequently fail when manipulated by code for a variety of reasons. But that is impossible to answer here because we do not know the input data.

However, what DataFrame.to_sql() does should be excluded. And for that, method can be passed in. It can be used to see what DataFrame.to_sql() does with the DataFrame data prior to handing it off to the SQL engine.

import csv import pandas as pd import sqlite3  def dump_foo(conn):     cur = conn.cursor()     cur.execute("SELECT * FROM foo")     rows = cur.fetchall()     for row in rows:         print(row)  conn = sqlite3.connect('example145.db')  csv_data = """1,01-01-2019,724 2,01-01-2019,233,436 3,01-01-2019,345 4,01-01-2019,803,933,943,923,954 4,01-01-2019,803,933,943,923,954 4,01-01-2019,803,933,943,923,954 4,01-01-2019,803,933,943,923,954 4,01-01-2019,803,933,943,923,954 5,01-01-2019,454 5,01-01-2019,454 5,01-01-2019,454 5,01-01-2019,454 5,01-01-2019,454"""  with open('test145.csv', 'w') as f:     f.write(csv_data)  with open('test145.csv') as csvfile:     data = [row for row in csv.reader(csvfile)] df = pd.DataFrame(data = data)  def checkit(table, conn, keys, data_iter):     print "What pandas wants to put into sqlite3"     for row in data_iter:         print(row)  # note, if_exists replaces the table and does not affect the data df.to_sql('foo', conn, if_exists="replace", method=checkit) df.to_sql('foo', conn, if_exists="replace") print "*** What went into sqlite3" dump_foo(conn) 
</div
 
 

Связанный проблема

1  Иерархическая система комментариев в резьбовом режиме: php и mysql  ( Hierarchical commenting system in threaded view php and mysql ) 
У меня есть необходимость оказать резьбовое изображение 2-уровневых иерархических комментариев системы. Комментарии хранятся в базе данных. Информация о иерар...

0  Добавление поля в запросе MySQL  ( Adding a field in a mysql query ) 
Мне нужно добавить поле в одном из наших запросов. Я NT PHP-программист купил, я немного ударил. Запрос: <код> if (_QUERYSTRING_) { switch ($intMode) { ...

0  Использование драйвера UnixoDBC для подключения к MySQL, база данных по умолчанию не работает  ( Using unixodbc driver to connect to mysql default database not working ) 
У меня есть мой unixodbc odbc.ini configure файл, как это: <код> [test] Driver = /usr/local/lib/libmyodbc5-5.1.8.so Description = Connector/ODBC 5.1.8 Drive...

0  Оптимизировать этот запрос на 1000000+ строк  ( Optimize this query for 1000000 rows ) 
Мне нужно потянуть данные и записывать его в файл CSV, но слишком много времени и слишком много времени. Что не так с этим и что я могу сделать? Кроме того, я...

3  MySQL слишком много подключений  ( Mysql too many connections ) 
Я ненавижу воспитывать вопрос, который широко спрашивает в Интернете, но я не могу решить это. Я начал проект некоторое время назад и после месяца тестирова...

1  Проблемы проектирования базы данных с отношениями  ( Database design issues with relationships ) 
Я работаю над обновлением для существующей базы данных, которая была разработана без какого-либо из кода для реализации рассматриваемой конструкции. Теперь я ...

2  Testopia: невозможно добавить тестовые случаи в тестовый прогон  ( Testopia unable to add test cases to a test run ) 
Bugzilla 4.4. , Tesopia 2.5, Ubuntu 15 все обновляется и почти по умолчанию по настройкам. Каждый раз, когда я пытаюсь обновить / редактировать существующи...

0  Сумма дебета на базе месяца в SQL  ( Sum of debit on the base of month in sql ) 
У меня есть квитанция об имени таблицы Скретко, как следует, <код> account_no date transaction_type amount s1 2012-7-7 opening ...

1  Размер базы данных для календаря событий  ( Database size for an event calendar ) 
Я делаю проект на календаре событий, используя PHP и MySQL. У меня есть сомнение, что, когда мы стараемся включить события в каждый час в каждый день, он де...

1  Заказ в порядке без использования событий  ( Order in order without using events ) 
Моя таблица MySQL имеет следующую структуру: <код> +------+----------+-----+-----------+----------------+----------+ | uuid | username | ... | clan_rank | u...

-2  PHP отображается только идентификатор, а не значение из MySQL [Закрыто]  ( Php only displaying id and not the value from mysql ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> закрыт . Этот вопрос нуждается в Детали или ясность . В настоящее...

0  Лучший способ написать этот запрос?  ( Best way to write this query ) 
Я делаю подпроси в присоединении к другой таблице, когда я хотел иметь возможность отсортировать результаты, которые я вернулся с ним, мне нужен только первый...

1  MySQL DPKG вернул код ошибки  ( Mysql dpkg returned an error code ) 
Поскольку Ubuntu 16.04 Я не могу установить новую версию MySQL-сервера (5.7). <код> mysql dpkg returned an error code ... Errors were encountered while proc...

-1  Используйте SELECT Под действие  ( Use select under case statement ) 
Я хочу использовать запрос, который позволяет мне получить два различия в зависимости от фильтра. Я попробовал это, но не работает. <код> CASE WHEN filtre =...

8  MySQL Заказ с использованием строки даты данных  ( Mysql order by using date data row ) 
У меня есть запрос что-то подобное: <код> public class AlarmReciever extends BroadcastReceiver { AlarmClock alarmClock=new AlarmClock(); @Override public v...