python-3.x 从sql为Pandas创建一个数据集,以一种更高性能的方式,而不必使用setdefault和append?

jfewjypa  于 2023-01-10  发布在  Python
关注(0)|答案(2)|浏览(88)

我这样创建Pandas数据框,我没有直接从数据库中获取,而是先用setdefaultappend创建一个循环,原因是在sql中我使用Inner Join,并且必须用append row[5]单独添加。
接下来我使用Pandas体内的数据集。
有没有一种不使用setdefault和append而创建数据集的更高性能的方法?或者我使用的代码已经很高性能了?

newlist = {}

conn = sqlite3.connect('....')
cursor = conn.cursor()

x = cursor.execute('''SQL CODES WITH INNER JOIN''')

for row in x.fetchall():
    newlist.setdefault((row[0],row[1],row[2], row[3], row[4]), []).append(row[5])

# Transform dataset to DataFrame
df = pd.DataFrame.from_dict(newlist, orient='index')
5hcedyr0

5hcedyr01#

我不了解您的SQL查询(也没有材料可供测试),但最简单的方法可能是使用pd.read_sql
例如:

conn = sqlite3.connect('....')
qs = '''SQL CODES WITH INNER JOIN'''

df = pd.read_sql(qs, conn)
aydmsdu9

aydmsdu92#

提高这段代码性能的一种方法是使用元组列表存储数据库查询中的数据,然后使用panda.DataFrame()从元组列表创建DataFrame,这样可以避免使用字典、setdefault()和append()方法的开销。
下面是如何修改代码来实现这一点:

data = []

conn = sqlite3.connect('....')
cursor = conn.cursor()

x = cursor.execute('''SQL CODES WITH INNER JOIN''')

for row in x.fetchall():
    data.append((row[0],row[1],row[2], row[3], row[4], row[5]))

# Create DataFrame from list of tuples
df = pd.DataFrame(data, columns=['col1', 'col2', 'col3', 'col4', 'col5', 'col6'])

这应该比原始代码性能更高,因为它避免了使用字典以及setdefault()和append()方法的开销。

相关问题