【pandas 小记】Series 转换成 DataFrame

在使用sqlalchemy 进行pandas与数据库交互时遇到一个问题:

import pandas as pd
import sqlalchemy as sqls
engine = sqls.create_engine('mysql+pymysql://root:[email protected]:3306/spiders')                          
sql = 'select * from user_temp'  
df1 =  pd.read_sql_query(sql, engine) 

从df1中取出一行,修改下,在作为新记录插入会数据表中。

In [20]: df2 = df1.loc[1]                                                                                                
In [21]: df2.id = 4                                                                                                      
In [22]: df2                                                                                                             
Out[22]: 
id       4
name    李四
Name: 1, dtype: object
In [26]: df2.to_sql('user_temp', engine, index= False,if_exists='append')
In [26]: type(df2)                                                                                                       
Out[26]: pandas.core.series.Series

结果报错:
在这里插入图片描述
在stackoverflow 看到一个问题,AttributeError: ‘Series’ object has no attribute ‘to_sql’
原文:https://stackoverflow.com/questions/29707002/attributeerror-series-object-has-no-attribute-to-sql#

所以,就将Series 转换成 DataFrame,Series 有自带的方法to_frame()可以进行转换。

In [28]: df2 = df1.loc[1].to_frame()                                                                                     
In [29]: type(df2)                                                                                                       
Out[29]: pandas.core.frame.DataFrame
In [30]: df2                                                                                                             
Out[30]: 
       1
id     4
name  李四

在插入一次,结果还是报错
在这里插入图片描述
看下报错内容:(1054, “Unknown column ‘1’ in ‘field list’”),而df2的columns就是“1”,所以才是提示错误,猜测to_sql会读取dataframe的columns属性,并与表中字段对应。
将to_frame()转换得到的结果中,index就可以与表中字段对应,于是将df2转置下,交换下index与columns。

In [12]: df3 = pd.DataFrame(df2.values.T,columns=df2.index)                                                              
In [13]: df3                                                                                                             
Out[13]: 
  id name
0  4   李四
In [20]: df3.to_sql('user_temp', engine, index= False,if_exists='append')   

在这里插入图片描述
记录成功插入到数据库中。
总结下,Series 转换成 DataFrame 可以使用to_frame()后,再转置index与columns

In [21]: df2 = df1.loc[1].to_frame()                                                                                     
In [22]: df2                                                                                                             
Out[22]: 
       1
id     2
name  李四
In [23]: df3 = pd.DataFrame(df2.values.T,columns=df2.index)                                                              
In [24]: df3                                                                                                             
Out[24]: 
  id name
0  2   李四
In [25]: df1                                                                                                             
Out[25]: 
  id name
0  1   张三
1  2   李四
2  3   王五

若有错误之处,欢迎评论指出,互相学习。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章