我试图从pandas数据帧创建一个数据库表。我收到一个奇怪的错误,我不能用一个简单的例子来复制。在
这就是密码
import pandas as pd
import os
import sqlite3
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
path = 'sqlite://'
engine = create_engine(path, echo=False)
df_kerbs, df_flows = get_dataframes()
df = pd.merge(df_kerbs, df_flows, on=['Src', 'SrcPort', 'Dst', 'DstPort', 'First'], how='right')
df.to_sql(name='FlowsKerbsMerged', con=engine, index=False, if_exists='append',
index_label='First')
这是输出:
^{pr2}$此外,如果之前出现以下情况,我不会收到错误:
df.to_sql(name='FlowsKerbsMerged', con=engine, index=False, if_exists='append', index_label='First')
我将其中两列重命名,即
df = df.rename(columns={'Application': 'Application2', 'Bytes': 'Bytes2'}
总之,在我的df
中,我有重复的列,但情况似乎并非如此:
In [6]: len(df.columns)
Out[6]: 91
In [7]: len(set(df.columns))
Out[7]: 91
错误的原因是什么?在
编辑:
以下是列列表:
In [5]: df.columns
Out[5]:
Index([u'ClientIP', u'ConversationIdentifier', u'CorvilOrderId', u'DomainName',
u'DomainNameSalt', u'HostName', u'HostNameAugmented', u'HostNameSalt',
u'KRB AP-REQ.ap-options', u'KRB AP-REQ.msg-type', u'KRB AP-REQ.pvno',
u'KRB ETYPE-INFO2-ENTRY.etype', u'KRB ETYPE-INFO2-ENTRY.salt',
u'KRB EncryptedData.cipher', u'KRB EncryptedData.etype',
u'KRB EncryptedData.kvno', u'KRB HostAddress.addr-type',
u'KRB HostAddress.address', u'KRB KDC-REP.crealm',
u'KRB KDC-REP.msg-type', u'KRB KDC-REP.pvno',
u'KRB KDC-REQ-BODY.etype.values',
u'KRB KDC-REQ-BODY.etype.values:repeating',
u'KRB KDC-REQ-BODY.kdc-options', u'KRB KDC-REQ-BODY.nonce',
u'KRB KDC-REQ-BODY.realm', u'KRB KDC-REQ-BODY.rtime',
u'KRB KDC-REQ-BODY.till', u'KRB KDC-REQ.msg-type', u'KRB KDC-REQ.pvno',
u'KRB KERB-PA-PAC-REQUEST.include-pac', u'KRB KRB-ERROR.e-data',
u'KRB KRB-ERROR.error-code', u'KRB KRB-ERROR.error-code_string',
u'KRB KRB-ERROR.error-description_string', u'KRB KRB-ERROR.msg-type',
u'KRB KRB-ERROR.pvno', u'KRB KRB-ERROR.realm', u'KRB KRB-ERROR.stime',
u'KRB KRB-ERROR.susec', u'KRB PA-DATA.padata-type',
u'KRB PA-DATA.padata-value', u'KRB PA-ENC-TS-ENC.patimestamp',
u'KRB PA-PAC-OPTIONS.flags', u'KRB PrincipalName.name-string.values',
u'KRB PrincipalName.name-string.values:repeating',
u'KRB PrincipalName.name-type', u'KRB Ticket.realm',
u'KRB Ticket.tkt-vno', u'Msg Decoder', u'Msg ID', u'Msg Type',
u'RequestReply', u'ServerIP', u'UserName', u'UserNameAugmented',
u'UserNameSalt', u'Watchlist Match', u'application', u'bytes',
u'client_port', u'dir', u'Dst', u'DstPort', u'server_port', u'Src',
u'SrcPort', u'time', u'ts_ns', u'First', u'Protocol', u'Group ID',
u'Port', u'VPort', u'IP TOS', u'VLAN ID', u'VLAN Pri', u'MPLS Exp',
u'Application', u'Packets', u'Messages', u'Bytes', u'Last',
u'LearnedIPs alertable', u'LearnedIPs learned-ip',
u'LearnedIPs new-ips', u'LearnedIPs subnet-name',
u'LearnedIPs timestamp-sec', u'LearnedIPs total-ips', u'SrcSubnet',
u'DstSubnet'],
dtype='object')
在列表的索引
58
处有一个名为application
的列。在在列表的索引
78
处有一个名为Application
的列。在在列表的索引
59
处有一个名为bytes
的列。在在列表的索引
81
处有一个名为Bytes
的列。在Python不认为这些是重复的,因为
set()
区分大小写,例如:您也可以通过以下方式检查:
^{pr2}$相关问题 更多 >
编程相关推荐