分配多个DataFrame列来匹配SQL表



我有几个dataframe需要翻转到SQL表。所有SQL表都共享一个模式,但dataframe不共享。我需要能够轻松匹配/更改df列到sql表。我在这里看到的所有内容都是使用df.to_sql操作1或2个字段。我需要能够像处理列表一样简单地操作至少10个字段。下面是示例表

list1
+-------+-------+-------+-------+  
| name  |hobby1 |hobby2 |hobby3 |  
+-------+-------+-------+-------+   
| kris  | ball  | swim  | dance |  
| james | eat   | sing  | sleep |  
| amy   | swim  | eat   | watch |  
+-------+-------+-------+-------+ 
df2
+---------+------------+-----------+-----------+  
| df2name  | df2hobby1 | df2hobby2 |df2hobby3 |  
+---------+------------+-----------+-----------+   
| kris     | ball      | swim      | dance    |  
| james    | eat       | sing      | sleep    |  
| amy      | swim      | eat       | watch    |  
+----------+-----------+-----------+-----------+ 
sql1
+-----------+-----------+-----------+-----------+  
| sql_name  |sql_hobby1 |sql_hobby2 |sql_hobby3 |  
+-----------+-----------+-----------+-----------+   
| kris      | ball      | swim      | dance     |  
| james     | eat       | sing      | sleep     |  
| amy       | swim      | eat       | watch     |  
+----------+-----------+------------+------------+ 

有时我在python字典中接收数据,我可以很容易地使用kwargs函数进行传输,并且效果很好。我的功能如下:

def transfer_dict(**kwargs):
transfer = {'sqlname':' ',
'sqlhobby1' : ' ',
'sqlhobby2' : ' ',
'sqlhobby3' : ' '
}
transfer.update(kwargs)
return (transfer)

我可以很容易地转移:

new_list.append(transfer_dict(sqlname=name, sqlhobby1=hobby1, sqlhobby2=hobby2, sqlhobby3=hobby3))

我可以使用相同的kwargs传递函数应用于数据帧传输到SQL吗?还是有更好的办法?

pandas.DataFrame.rename()方法将接受一组类似字典的列名和名称来重命名它们。在许多情况下,您所描述的问题的最快解决方案(如果我正确理解您的话)是使用rename()drop()的组合来更改源DataFrame,使其与SQL目标匹配,然后使用to_sql(),正如您所描述的那样(但是现在,关键的是,所有列名都与其预期目标匹配)。例如:

sql_mappings = {'df2_name':'sql_name', 'df2_hobby1':'sql_hobby1', 'df2_hobby2':'sql_hobby2', 'df2_hobby3':'sql_hobby3'}
sql_columns = [i for i in sql_mappings.values()]
df2 = df2.rename(columns=sql_mappings)
df2 = df2.drop(columns=[col for col in df2 if col not in sql_columns ])

如果您想设置sql表名之类的东西并动态执行to_sql,我可以想象一个相当简单的包装器函数,使用这种方法完成这两项任务。

最新更新