我正在尝试创建一个包含3个范围组合的表。
范围1和范围2相等。
范围3不同且长度不同。
对于任何给定的行,第1列中的值不能等于第2列中的值。
e.g。范围1:[1-2],范围2:[1-2],范围3:[5-7]
预期结果将是:
col1 | col2 | col3 |
1 | 2 | 5 |
1 | 2 | 6 |
1 | 2 | 7 |
2 | 1 | 5 |
2 | 1 | 6 |
2 | 1 | 7 |
我正在使用python sqlite3包,所以我可以在python中使用范围。以前我一直使用生成器构建表,该生成器迭代3个嵌套范围,如下所示:
def all_the_combos():
for x in range(1,len(all_x)+1):
for y in range(1,len(all_x)+1):
if x == y:
continue
for z in range(min(all_z),max(all_z)+1):
yield (x, y, z)
cur.execute('BEGIN TRANSACTION')
cur.executemany('INSERT into All_Combos (x, y, z) Values (?, ?, ?)', all_the_combos())
然而,对于大范围来说这是缓慢的,我希望有一些聪明的方法来使用可以提供更好性能的连接。任何建议都表示赞赏。
答案 0 :(得分:0)
下面怎么样。你需要熊猫模块。如果你没有熊猫执行" pip install pandas"在运行此代码之前。
import sqlite3
import pandas as pd
from itertools import product
# your sample data
col1 = range(1,3)
col2 = range(1,3)
col3 = range(5,8)
# product -> dataframe -> sqlite3
con = sqlite3.connect("/path/to/sqlite3.db")
df = pd.DataFrame(
row for row in product(col1, col2, col3)
if not row[0]==row[1]
)
df.to_sql("output_table_name", con)