gpt4 book ai didi

mysql - Pandas 导入未插入所有行

转载 作者:行者123 更新时间:2023-11-29 09:49:09 25 4
gpt4 key购买 nike

我通过以下方式导入包含 3300 行数据的 .csv 文件:

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

成功导入后,我在表上执行“select * from ...”查询,该查询返回 3100 行,那么缺少的 200 行在哪里?

我假设存在无法读入的损坏数据,我进一步假设这些数据随后被 pandas 跳过。然而,没有警告、日志或消息明确说明这一点。脚本正常执行。

有人遇到过类似的问题,还是我错过了一些完全明显的东西?

最佳答案

虽然问题没有指定engine,但我们假设它是sqlite3

以下可重新运行的代码显示 DataFrame.to_sql() 创建一个 sqlite3 表,并在其上放置索引。这是来自数据帧索引的数据。

从字面上理解问题代码,csv 应该使用 RangeIndex 导入到 DataFrame 中,这将是唯一的序数。因此,如果 csv 中的行数与加载到 sqlite3 表中的行数不匹配,人们会感到惊讶。

因此需要做两件事:验证 csv 是否正确导入。这可能是问题所在,因为源自人工操作的电子表格的格式不良的 csv 文件在由代码操作时经常会因各种原因而失败。但这在这里是不可能回答的,因为我们不知道输入数据。

但是,应该排除 DataFrame.to_sql() 所做的事情。为此,可以传入 method。它可用于在将 DataFrame 数据传递给 SQL 之前查看 DataFrame.to_sql() 对 DataFrame 数据执行的操作引擎

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)

关于mysql - Pandas 导入未插入所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55141808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com