【问题标题】:pandas create database with index熊猫创建带有索引的数据库
【发布时间】:2018-02-27 04:40:12
【问题描述】:

我正在尝试使用 pandas 创建一个 sqlite 数据库。

我可以通过以下方式保存数据:

from sqlalchemy import create_engine                                                                                                                                                                               
from sqlalchemy.orm import sessionmaker                                                                                                                                                                            
engine = create_engine(path, echo=False)                                                                                                                                                                           
df_flows.to_sql('flows', engine, if_exists='append', index=False, index_label='First')                                                                                                                         

我可以用

回读它
df = pd.read_sql("SELECT * FROM flows WHERE First>1504101810 AND First<1504105409", engine)                                                                                                                        

数据在磁盘上,但我认为索引无法正常工作:

In [22]: from sqlalchemy.engine import reflection                                                                                                                                                                  

In [23]: insp = reflection.Inspector.from_engine(engine)                                                                                                                                                           

In [24]: insp.get_indexes('flows')                                                                                                                                                                                 
Out[24]: []   

现在我有两个问题:

1) 为什么First 列没有出现insp.get_indexes('flows')

2) 如何向我创建的数据库添加 1 个或多个索引。

编辑:

这是数据框的结构

In [25]: df_flows.dtypes                                                                                                                                                                                    
Out[25]:                                                                                                                                                                                                    
Protocol        object                                                                                                                                                                                      
Src             object                                                                                                                                                                                      
SrcPort        float64                                                                                                                                                                                      
Dst             object                                                                                                                                                                                      
DstPort        float64                                                                                                                                                                                      
Group ID         int64                                                                                                                                                                                      
Port            object                                                                                                                                                                                      
VPort            int64                                                                                                                                                                                      
IP TOS          object                                                                                                                                                                                      
VLAN ID        float64                                                                                                                                                                                      
VLAN Pri       float64                                                                                                                                                                                      
MPLS Exp       float64                                                                                                                                                                                      
Application     object                                                                                                                                                                                      
Packets          int64                                                                                                                                                                                      
Messages         int64                                                                                                                                                                                      
Bytes            int64                                                                                                                                                                                      
First            int64                                                                                                                                                                                      
Last             int64                                                                                                                                                                                      
SrcSubnet       object                                                                                                                                                                                      
DstSubnet       object                                                                                                                                                                                      
dtype: object              

【问题讨论】:

    标签: python sqlite pandas sqlalchemy


    【解决方案1】:

    您没有显示数据框的结构,因此很难回答您的问题。不过,鉴于您的意见,我可以做出一些推论。

    当您将数据库保存到 sql 时,您设置了index=False。这意味着数据框上的任何索引都不会保存为数据库中的列。然后,您继续分配一个索引标签,如果您将 index 设置为 False,它将不会产生任何影响。如果要重命名现有索引名称,则使用此参数。

    index : 布尔值,默认为 True 将 DataFrame 索引写入列。

    index_label : 字符串或序列,默认无 索引列的列标签。如果没有给出(默认)和 index 为 True,则使用索引名称。 如果 DataFrame 使用 MultiIndex,则应该给出一个序列。

    必须通过数据库而不是 pandas 创建数据库索引。

    【讨论】:

    • 所以你的意思是如果index_label不是None那么索引必须设置为True并且自动替换为指定的列名?
    • 没有。我是说如果index=False 会忽略index_label。如果index=True(默认值),它将使用其名称将索引写入列。但是,您可以使用其他名称,使用 index_label 参数。
    • 好的,但是如果我想稍后添加索引,如果我想按多列索引呢?
    • 我的目标是建立一个数据库,我可以在其中快速搜索变量FirstSrc(第一个是数字,第二个是字符串)
    • pandas 数据框中的索引与数据库索引无关。您需要使用数据库包自己构建索引。 index 参数只是询问您是否要将数据帧索引写入数据库中的列(例如,如果索引只是有序范围,例如 0、1、2、.. .n).
    猜你喜欢
    • 2016-01-13
    • 1970-01-01
    • 2014-02-10
    • 2016-06-16
    • 2021-08-14
    • 2015-03-22
    • 1970-01-01
    • 2017-05-01
    • 2021-08-28
    相关资源
    最近更新 更多