Я строю библиотеку данных python для анализа поверх базы данных схемы звездочек, и у меня возникают проблемы с интегрированием pandas и sqlalchemy из-за дублирования столбцов в кадре данных.Дублировать столбцы при запросе SQLAlchemy в Pandas DF?
Вот классы:
class Student(Base):
__tablename__ = 'DimStudent'
id = Column('StudentKey', Integer, primary_key=True)
srcstudentid = ('SrcStudentId', Integer)
firstname = Column('FirstName', String)
middlename = Column('MiddleName', String)
lastname = Column('LastName', String)
lep = Column('LimitedEnglishProficiency', String)
frl = Column('FreeReducedLunch', String)
sped = Column('SpecialEducation', String)
class School(Base):
__tablename__ = 'DimSchool'
id = Column('SchoolKey', Integer, primary_key=True)
name = Column('SchoolName', String)
district = Column('SchoolDistrict', String)
statecode = Column('StateCode', String)
class StudentScore(Base):
__tablename__ = 'FactStudentScore'
studentkey = Column('StudentKey', Integer, ForeignKey('DimStudent.StudentKey'), primary_key=True)
teacherkey = Column('TeacherKey', Integer, ForeignKey('DimTeacher.TeacherKey'), primary_key=True)
schoolkey = Column('SchoolKey', Integer, ForeignKey('DimSchool.SchoolKey'), primary_key = True)
assessmentkey = Column('AssessmentKey', Integer, ForeignKey('DimAssessment.AssessmentKey'), primary_key=True)
subjectkey = Column('SubjectKey', Integer, ForeignKey('DimSubject.SubjectKey'), primary_key=True)
yearcyclekey = Column('YearCycleKey', Integer, ForeignKey('DimYearCycle.YearCycleKey'), primary_key=True)
pointspossible = Column('PointsPossible', Integer)
pointsreceived = Column('PointsReceived', Integer)
student = relationship("Student", backref=backref('studentscore'))
school = relationship("School", backref=backref('studentscore'))
assessment = relationship("Assessment", backref='studentscore')
teacher = relationship("Teacher", backref='studentscore')
subject = relationship("Subject", backref='studentscore')
yearcycle = relationship("YearCycle", backref='studentscore')
Всякий раз, когда я запрашиваю мои данные, я постоянно придумываю дублированные столбцы данных, например, ключ школы в этом ОРМЕ вызова, а затем построить dataframe от него.
school = session.query(StudentScore, School, Subject)\
.join(StudentScore.school).join(StudentScore.subject)\
.filter(School.name.like('%Dever%'))\
.filter(Subject.code == 'Math')
a = pd.read_sql(school.statement, school.session.bind)
Это SO thread обеспечивает хороший метод транспозиции, чтобы удалить дубликат.
a = a.T.drop_duplicates().T
Однако я до сих пор работаю в ошибку, когда я общаюсь с этим dataframe в переменном исследователе IDE. Ошибка: «Reindexing действует только с уникально оцененными объектами индекса»
Любая идея, где проблема?
Как временный взлом вы можете использовать a.reset_index (inplace = True)? – Gecko
Я не делал sqlalchemy в то время, но вам действительно нужно .join (School)? – Gecko
Грязным решением может быть просто сделать a.drop_duplicates (inplace = true) http://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.drop_duplicates.html – PlagTag