2017-09-18 3 views
1

私はpandasでsqliteデータベースを作成しようとしています。pandasはインデックス付きデータベースを作成します

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]: [] 

は今、私は2つの質問を持っています

1)なぜ列Firstinsp.get_indexes('flows')

2と表示されません)どのように私は、私が作成したデータベースへの1つのまたは複数のインデックスを追加することができます。

EDIT:

これはあなたがあなたのデータフレームの構造を示していないので、あなたの質問に答えることは困難であるデータフレーム

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    

答えて

0

の構造です。しかし、あなたの入力があれば、私はいくつかの推論をすることができます。

データベースをsqlに保存するときは、index=Falseと設定します。つまり、データフレーム上のインデックスはデータベースの列として保存されません。次に、インデックスをFalseに設定した場合、影響を与えないインデックスラベルを割り当てます。このパラメータは、既存のインデックス名の名前を変更する場合に使用します。

インデックス:ブール値、既定値True データフレームインデックスを列として書き込みます。

index_label:文字列またはシーケンス、デフォルトなし インデックス列の列ラベル。 None(デフォルト)が指定され、 indexがTrueの場合、インデックス名が使用されます。 DataFrameでMultiIndexが使用されている場合は、シーケンスを指定する必要があります。

データベースインデックスは、pandasではなく、データベースを使用して作成する必要があります。

+0

'index_label'が' None'でなければ、indexはTrueに設定されなければならず、自動的に指定された列名に置き換えられると言っていますか? – Donbeo

+0

いいえ、 'index = False'の場合、' index_label'は無視されます。 'index = True'(デフォルト値)の場合、その名前を使ってインデックスをカラムとして書き出します。しかし、 'index_label'パラメータを使って別の名前を使うこともできます。 – Alexander

+0

okしかし、複数の列でインデックスを作成する場合、後でインデックスを追加したいのですが? – Donbeo

関連する問題