【问题标题】:pandas sqlite3 operationalerror: table has no column namedpandas sqlite3 操作错误:表没有名为的列
【发布时间】:2017-05-11 22:50:05
【问题描述】:

我正在尝试使用 chromedriver 收集数据

我正在使用 url 'http://web.mta.info/developers/turnstile.html' 来获取我的数据,提取文件链接,然后根据数据的日期将其放入两个表中 这是我要执行的代码:

record_cnt = 0  
for link in data_list_post:
    data = pd.read_table(link, sep=',')
    print('%s:%s rows %s columns' % (link[-10:-4],data.shape[0], data.shape[1])) 
    record_cnt += data.shape[0]
    data.to_sql(name='post', con=conPost, flavor='sqlite', if_exists='append')

追溯:

---------------------------------------------------------------------------
OperationalError                          Traceback (most recent call last)
<ipython-input-9-6f5adea38bf9> in <module>()
      3     data = pd.read_table(link, sep=',')
      4     record_cnt += data.shape[0]
----> 5     data.to_sql(name='post', con=conPost, flavor='sqlite', if_exists='append')

/Users/xx/anaconda/lib/python3.4/site-packages/pandas/core/generic.py in to_sql(self, name, con, flavor, schema, if_exists, index, index_label, chunksize, dtype)
   1199         sql.to_sql(self, name, con, flavor=flavor, schema=schema,
   1200                    if_exists=if_exists, index=index, index_label=index_label,
-> 1201                    chunksize=chunksize, dtype=dtype)
   1202 
   1203     def to_pickle(self, path):

/Users/xx/anaconda/lib/python3.4/site-packages/pandas/io/sql.py in to_sql(frame, name, con, flavor, schema, if_exists, index, index_label, chunksize, dtype)
    468     pandas_sql.to_sql(frame, name, if_exists=if_exists, index=index,
    469                       index_label=index_label, schema=schema,
--> 470                       chunksize=chunksize, dtype=dtype)
    471 
    472 

/Users/xx/anaconda/lib/python3.4/site-packages/pandas/io/sql.py in to_sql(self, frame, name, if_exists, index, index_label, schema, chunksize, dtype)
   1501                             dtype=dtype)
   1502         table.create()
-> 1503         table.insert(chunksize)
   1504 
   1505     def has_table(self, name, schema=None):

/Users/xx/anaconda/lib/python3.4/site-packages/pandas/io/sql.py in insert(self, chunksize)
    662 
    663                 chunk_iter = zip(*[arr[start_i:end_i] for arr in data_list])
--> 664                 self._execute_insert(conn, keys, chunk_iter)
    665 
    666     def _query_iterator(self, result, chunksize, columns, coerce_float=True,

/Users/xx/anaconda/lib/python3.4/site-packages/pandas/io/sql.py in _execute_insert(self, conn, keys, data_iter)
   1289     def _execute_insert(self, conn, keys, data_iter):
   1290         data_list = list(data_iter)
-> 1291         conn.executemany(self.insert_statement(), data_list)
   1292 
   1293     def _create_table_setup(self):

OperationalError: table post has no column named A002

【问题讨论】:

  • 听起来您从data = pd.read_table(link, sep=',') 获得的数据有一个名为A002 的列,它无法插入到您的sql 表中,因为该sql 表没有A002 字段定义。该 sql 表中的列是什么?
  • 列名是'index', 'C/A', 'UNIT', 'SCP', 'STATION', 'LINENAME', 'DIVISION', 'DATE', 'TIME', 'DESC'、'ENTRIES'、'EXITS'
  • 您是在此代码之前创建您的 sql post 表,还是使用您的代码 data.to_sql(name='post', con=conPost, flavor='sqlite', if_exists='append') 动态创建的?
  • 但是每次我运行它时都会出现一个新的“操作错误:表帖子没有名为....”的列,所以我如何让它使用它拥有的行而不是担心这些其他列?
  • 是的,我创建了conPost = sqlite3.connect(post.db),然后下一个代码块就是上面列出的代码,每次我调用这个代码时,它都会在运行时产生一个新的operationalerror

标签: python pandas sqlite


【解决方案1】:

您的问题是您想从该页面的每个链接中提取表格,并将它们编译成单个数据库表格......但是链接中的表格不同。指向列表顶部的链接,例如

http://web.mta.info/developers/data/nyct/turnstile/turnstile_160312.txt

作为他们的第一行/标题行:

C/A,UNIT,SCP,STATION,LINENAME,DIVISION,DATE,TIME,DESC,ENTRIES,EXITS

vs 指向页面底部的链接,例如

http://web.mta.info/developers/data/nyct/turnstile/turnstile_121222.txt

有非常不同的第一行,例如:

A002,R051,02-00-00,12-15-12,03:00:00,REGULAR,003911852,001349428,12-15-12,07:00:00,REGULAR,003911868,001349432,12-15-12,11:00:00,REGULAR,003911930,001349538,12-15-12,15:00:00,REGULAR,003912146,001349600,12-15-

起初看起来上面的第二页只是缺少一个标题行,但它的顶行(和所有行)看起来也不像第一组中的数据行。你能理解为第二组中的那些行调用的所有字段吗?

基本上有一些链接(通常在列表的下方),您必须区别对待顶部链接,因为表格不同。

【讨论】:

    猜你喜欢
    • 2022-01-05
    • 2015-03-19
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多