如何将Pandas DataFrame的指定单列/多列插入SQLite数据库?
Pandas DataFrame 插入SQLite指定单列/多列方法
一、插入单列(简洁实现)
你原来的单列插入代码是可行的,这里提供更简洁的写法:
crsr = conn.cursor() sql = "INSERT INTO vendor (VendorID) VALUES (?)" # 直接将目标列转为单元素元组的列表 data = [(row,) for row in df['VendorID']] crsr.executemany(sql, data) conn.commit()
二、插入多列(以时间列为例)
要插入tpep_pickup_datetime和tpep_dropoff_datetime这类多列,只需调整SQL语句的字段和占位符,同时把DataFrame对应列转为多元素元组列表即可:
假设你的SQLite表名为trip_data,包含对应时间字段,代码如下:
crsr = conn.cursor() # 构造插入语句:字段和占位符一一对应 sql = "INSERT INTO trip_data (tpep_pickup_datetime, tpep_dropoff_datetime) VALUES (?, ?)" # 提取目标列,生成元组列表(每行是一个含两个值的元组) data = list(df[['tpep_pickup_datetime', 'tpep_dropoff_datetime']].itertuples(index=False, name=None)) crsr.executemany(sql, data) conn.commit()
也可以用apply生成元组列表,效果一样:
data = df[['tpep_pickup_datetime', 'tpep_dropoff_datetime']].apply(tuple, axis=1).tolist()
三、通用工具函数(支持任意单列/多列)
如果需要频繁插入不同列,可以写个通用函数,一次处理任意数量的列:
def insert_columns_to_sqlite(conn, table_name, df, columns): crsr = conn.cursor() cols_str = ", ".join(columns) placeholders = ", ".join(["?"] * len(columns)) sql = f"INSERT INTO {table_name} ({cols_str}) VALUES ({placeholders})" # 生成符合要求的数据格式 data = list(df[columns].itertuples(index=False, name=None)) crsr.executemany(sql, data) conn.commit() # 调用示例:插入单列VendorID insert_columns_to_sqlite(conn, 'vendor', df, ['VendorID']) # 调用示例:插入两个时间列 insert_columns_to_sqlite(conn, 'trip_data', df, ['tpep_pickup_datetime', 'tpep_dropoff_datetime'])
内容的提问来源于stack exchange,提问作者DeBe
相关产品推荐
相关产品推荐

