我有几个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
,我可以想象一个相当简单的包装器函数,使用这种方法完成这两项任务。