【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   王五

若有錯誤之處,歡迎評論指出,互相學習。

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