重新组织DataFrame并写入SQL数据库

2024-09-28 22:38:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧:

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   

此数据帧还与特定的日期地区值相关联。你知道吗

我想将此数据帧的内容输出到SQL数据库中,该数据库将按以下方式显示/包含以下信息:

表名地区#

表格内容(区域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

当不同的数据帧写入SQL时,SQL表应该获得更多的行。有人能帮我创建一些代码来重新组织我的数据并以这种方式将其写入SQL吗?我对Python非常陌生,遗憾的是在Pandas和SQL文档中没有找到很多直接有用的信息。你知道吗

事先非常感谢。你知道吗


Tags: 数据信息数据库内容sqlby方式地区
1条回答
网友
1楼 · 发布于 2024-09-28 22:38:49

你看过Pandas DataFrame.to_sql吗?你知道吗

您可以获取(部分)数据帧并将其写入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

The SQL table should get more rows as different DataFrames get written to SQL.

在这种情况下,您可以在数据框到数据库():

if_exists: append: If table exists, insert data. Create if does not exist.

编辑:

要重新组织新的数据帧(逐步):

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

相关问题 更多 >