2015-04-17 3 views
0

Я импортировать запрос к панд dataframe, а затем создает результирующую dataframe под названием hindex импортировать в моей таблице базы данных, как показано ниже:AttributeError: объект серии 'не имеет атрибута «to_sql»

import sqlite3 
import numpy as np 
import pandas as pd 

#access the database created 
db = sqlite3.connect('test/publications') 

df = pd.read_sql("select AuthorID as ID, citations from publications as p join authors_publications as a on p.ID=a.PaperID order by AuthorID, citations desc", db) 

df2 = df.sort(['ID','Citations'],ascending=['Citations','ID']) 
groups = df2.groupby('ID') 
ind2 = np.array([np.arange(len(g))+1 for g in groups.groups.itervalues()]) 
df2['newindex'] = np.hstack(ind2) 
df2['condition'] = df2['Citations']>=df2['newindex'] 
hindex = df2.groupby('ID').sum()['condition'] 

hindex.to_sql('authors_hindex', db, flavor='sqlite', if_exists='replace', index=True) 

Раньше я использовал to_sql, и это сработало. Не знаю, почему это не здесь. Я получаю следующее сообщение об ошибке:

AttributeError      Traceback (most recent call last) 
<ipython-input-4-0748af5dad1d> in <module>() 
    43 
    44 print hindex 
---> 45 hindex.to_sql('authors_hindex', db, flavor='sqlite', if_exists='replace', index=True) 
    46 

/usr/lib/python2.7/dist-packages/pandas/core/generic.pyc in __getattr__(self, name) 
    1813     return self[name] 
    1814    raise AttributeError("'%s' object has no attribute '%s'" % 
-> 1815         (type(self).__name__, name)) 
    1816 
    1817  def __setattr__(self, name, value): 

AttributeError: 'Series' object has no attribute 'to_sql' 
+0

Какая версия pandas у вас есть, как она должна была работать даже с серией – EdChum

+0

@EdChum У меня есть 0.13.1 – BKS

+0

Это старая версия, которую я не помню, когда она была добавлена ​​в Series, если вы можете обновить, последняя стабильная версия - 0.16.0 – EdChum

ответ

1

Попробуйте это:

hindex = df2.groupby('ID').sum()[['condition']] 

так, используя двойной [[]] вернет DF

Ваша оригинальная линия: hindex = df2.groupby('ID').sum()['condition'] вернулся серии, но это есть to_sql хотя так не понятно, почему это не удалось.

+0

Работало! :-))))) – BKS