【问题标题】:Reorganizing DataFrame and writing to SQL database重组 DataFrame 并写入 SQL 数据库
【发布时间】:2015-10-31 16:57:45
【问题描述】:

我有以下数据框:

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 还与特定的 DateDistrict 值相关联。

我想将此 DataFrame 的内容输出到 SQL 数据库中,该数据库将如下所示/包含以下信息:

表格名称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

随着不同的 DataFrame 被写入 SQL,SQL 表应该会获得更多的行。任何人都可以帮助我创建一些代码来重组我的数据并以这种方式将其写入 SQL 吗?我对 Python 很陌生,不幸的是,在 Pandas 和 SQL 文档中没有找到很多直接有用的信息。

非常感谢您。

【问题讨论】:

    标签: python sql database pandas dataframe


    【解决方案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
    

    【讨论】:

    • 我确实看过这个,但这是否允许我稍后在数据库中按照我上面提到的方式重新组织数据?我认为我不能并且必须以我希望它显示的形式将其写入数据库。
    • 我编辑它以重新组织 DataFrame - 基本上“一体式”是(我希望)你需要的。但是通过其他单个步骤,您可以更好地理解它。
    • 我目前正在对我的代码进行类似的处理。谢谢,编辑很有帮助。
    猜你喜欢
    • 2017-02-19
    • 2013-07-22
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    相关资源
    最近更新 更多