重组DataFrame并写入SQL数据库

时间:2015-08-08 08:56:56

标签: python sql database pandas dataframe

我有以下DataFrame:

by_timeofday=  

                                  Area1      Area2      Area3          Area4
Time                                                                          
Day (9AM-6PM)                       1     0.411111     0.405556           0   
Evening (6PM-10PM)                  1     0.650000     0.650000           0   
Morning (5AM-9AM)                   1     1.000000     1.000000           0   
Night (10PM-5AM)                    1     1.000000     1.000000           0   

此DataFrame还与特定的日期值相关联。

我想将此DataFrame的内容输出到SQL数据库中,它将以下列方式/包含以下信息:

TABLE NAME District_Area#

表格内容(区域2显示的示例):

Date         Morning (5AM-9AM)      Day (9AM-6PM)     Evening (6PM-10PM)     Night (10PM-5AM)
01.01.2011       1.000000             0.411111             0.650000             1.000000

当不同的DataFrames写入SQL时,SQL表应该获得更多行。任何人都可以帮我创建一些代码来重新组织我的数据并以这种方式将其写入SQL吗?我是Python的新手,很遗憾没有找到很多关于Pandas和SQL文档的直接有用的信息。

非常感谢你。

1 个答案:

答案 0 :(得分:1)

你看过Pandas DataFrame.to_sql吗?

您可以使用(部分)DataFrame并将其写入SQL数据库。这是一个基本的例子(使用sqlite):

 import sqlite3 as sql
 con = sql.connect(PATH_TO_DATABASE)
 table_name = test
 by_timeofday.to_sql(name=table_name, con=con, FURTHER_OPTIONS) # write full df to sql
  

在编写不同的DataFrame时,SQL表应该获得更多行   到SQL。

在这种情况下,您可以在df.to_sql()中设置选项:

  

if_exists:append:如果表存在,则插入数据。如果不存在则创建。

修改

要重新组织新的DataFrame(一步一步):

In[30]: by_timeofday
Out[30]: 
          Area1     Area2     Area3  Area4
Day          1  0.411111  0.405556      0
Evening      1  0.650000  0.650000      0
Morning      1  1.000000  1.000000      0
Night        1  1.000000  1.000000      0

In[33]: by_timeofday.loc[:,"Area2"]  # this is a 'Series' not a 'DataFrame'
Out[33]: 
Day        0.411111
Evening    0.650000
Morning    1.000000
Night      1.000000

In[36]: df = pd.DataFrame(by_timeofday.loc[:,"Area2"])  # make 'DataFrame' out of the 'Series'
Out[36]: 
            Area2
Day      0.411111
Evening  0.650000
Morning  1.000000
Night    1.000000

In[41]: df.T # transpose
Out[41]: 
            Day  Evening  Morning  Night
Area2  0.411111     0.65        1      1

In[44]: df = pd.DataFrame(by_timeofday.loc[:,"Area2"]).T  # all in one
Out[44]: 
            Day  Evening  Morning  Night
Area2  0.411111     0.65        1      1

# add date:
In[45]: df["Date"] = "01.01.2011"
In[46]: df
Out[46]: 
            Day  Evening  Morning  Night        Date
Area2  0.411111     0.65        1      1  01.01.2011